У меня есть фрагмент XML как ниже
<Detail uid="6">
<![CDATA[
<div class="heading">welcome to my page</div>
<div class="paragraph">this is paraph</div>
]]>
</Detail>
и я хочу смочь измениться
<div class="heading">...</div> to <h1>Welcome to my page</h1>
<div class="paragraph">...</div> to <p>this is paragraph</p>
Вы знаете, как я могу сделать это в xslt 1.0
А как насчет запуска двух трансформаций?
Пасс 1.)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="Detail">
<Detail>
<xsl:copy-of select="@*"/>
<xsl:value-of select="." disable-output-escaping="yes" />
</Detail>
</xsl:template>
</xsl:stylesheet>
Будет производить:
<?xml version="1.0" encoding="UTF-8"?>
<Detail uid="6">
<div class="heading">welcome to my page</div>
<div class="paragraph">this is paraph</div>
</Detail>
Пасс 2.)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*| node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="div[@class='heading']">
<h1><xsl:value-of select="."/></h1>
</xsl:template>
<xsl:template match="div[@class='paragraph']">
<p><xsl:value-of select="."/></p>
</xsl:template>
</xsl:stylesheet>
Производит:
<?xml version="1.0" encoding="UTF-8"?>
<Detail uid="6">
<h1>welcome to my page</h1>
<p>this is paraph</p>
</Detail>
Задача < ant >
выполняет необходимые действия:
Запускает Ant для предоставленного файла сборки. Это может использоваться для построения подпроектов.
По умолчанию все свойства текущего проекта будут доступны в новом проекте.
Поэтому необходимо просто вызвать < ant antfile = «dir/build.xml »/>
. Нет необходимости устанавливать атрибут inheritAll
, по умолчанию он имеет значение true
.
Оператор | |
вычисляет левое выражение, а если оно равно 0 (false), то вычисляет правое выражение. Если левая сторона не равна 0, то она вообще не будет оценивать правую сторону.
В выражении x++ | | x++ | | x++ | |...
, первый x++
оценивается; значение равно 0, а значение x увеличивается до 1. Второй x++
оценивается; вычисляется как 1, а x увеличивается до 2. Поскольку второе x++
вычислено как ненулевое значение, ни одно из оставшихся выражений x++
не вычисляется.
Невозможно указать XSL 1.0, чтобы извлечь последовательность из CDATA и проанализировать ее как XML.
Вы не можете «удалить» CDATA, но вы можете несколько грубо добиться желаемого вывода:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<Detail>
<xsl:variable name="before" select="substring-before(//Detail,'<div class="heading">')" />
<xsl:variable name="afteropen" select="substring-after(//Detail,'<div class="heading">')" />
<xsl:variable name="body" select="substring-before($afteropen, '</div>')" />
<xsl:variable name="after" select="substring-after($afteropen, '</div>')" />
<xsl:value-of select="concat($before, '<h1>', $body, '</h1>',$after)"
disable-output-escaping="yes" />
</Detail>
</xsl:template>
</xsl:stylesheet>
Это будет работать для первого типа Div, вы пытаетесь разобрать, и вы может следовать за чем-то похожим со вторым. Это может быть сделано более общем с некоторыми усилиями.