У меня есть XML, и я хотел бы изменить значение атрибута (name="name") на другое (name="value") со следующим xslt:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!--xsl:template match="text()"-->
<!--xsl:text select="." disable-output-escaping="yes" /-->
<!--xsl:value-of select="." disable-output-escaping="yes" />
<xsl:copy-of select="child::*"/>
</xsl:template-->
<xsl:template match="@*|node()" mode="s">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="s"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()" mode="se">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="se"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@name" mode="se">
<xsl:attribute name="name">value</xsl:attribute>
</xsl:template>
<xsl:template match="tag5[@type='testtype']">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="s"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tag6[@name='name']" mode="s">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="se"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Фрагмент ввода XML:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot version="2.0">
<Model id="111" name="test">
<tag1 id="222" type="VERSION">
<tag2 id="333" name="Version" value="2"/>
</tag1>
<tag3 id="444">
<tag4 id="555" versionID="test/00001" name="name" definition="through test. 
" attrs="12 23"/>
<tag4 id="666" versionID="test/00001" name="name" definition="through test 2. 
" messages="34 45"/>
</tag3>
<tag5 id="777" type="testtype">
<tag6 id="888" name="name" value="667"/>
<tag6 id="999" name="context" value="FIX 5.0"/>
</tag5>
</Model>
</dataroot>
ВЫВОД XML после применения xslt:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot version="2.0">
<Model id="111" name="test">
<tag1 id="222" type="VERSION">
<tag2 id="333" name="Version" value="2"/>
</tag1>
<tag3 id="444">
<tag4 id="555" versionID="test/00001" name="name" definition="through test. " attrs="12 23"/>
<tag4 id="666" versionID="test/00001" name="name" definition="through test 2. " messages="34 45"/>
</tag3>
<tag5 id="777" type="testtype">
<tag6 id="888" name="value" value="667"/>
<tag6 id="999" name="context" value="FIX 5.0"/>
</tag5>
</Model>
</dataroot>
Xslt в основном делает то, что от него ожидают. Однако с неожиданным преобразованием:

 -> (unexpected transform)
Я хочу сохранить исходные сущности. Я пробовал отключить вывод-escape (см. раздел комментариев в xslt с заменой текста на @definition), не работает. Какие-либо предложения?
Я использую xsltproc кстати.
Заранее спасибо!


, и
являются одинаково допустимыми представлениями одного и того же символа. Зачем тебе это? - person michael.hor257k   schedule 25.03.2016&#xA;
) и выведя их с помощью DOE, но это большая работа. - person michael.hor257k   schedule 25.03.2016