[英]Transform XML replacing nodes
我需要转换XML。 我尝试XSLT转换失败。 我是新来的。
资源:
<md>
<mi>
<mt>rock</mt>
<mt>classic</mt>
<mt>pop</mt>
<mv>
<moid>blue</moid>
<r>2</r>
<r>4</r>
<r>6</r>
</mv>
<mv>
<moid>yellow</moid>
<r>1</r>
<r>5</r>
<r>33</r>
</mv>
<mv>
<moid>green</moid>
<r>22</r>
<r>0</r>
<r>10</r>
</mv>
</mi>
</md>
目标:
<md>
<mi>
<mt>rock</mt>
<mt>classic</mt>
<mt>pop</mt>
<mv>
<moid>blue</moid>
<rock>2</rock>
<classic>4</classic>
<pop>6</pop>
</mv>
<mv>
<moid>yellow</moid>
<rock>1</rock>
<classic>5</classic>
<pop>33</pop>
</mv>
<mv>
<moid>green</moid>
<rock>22</rock>
<classic>0</classic>
<pop>10</pop>
</mv>
</mi>
</md>
基本上,我需要根据位置用mt节点的正确值替换'r'tag节点。 例如,第一个“ r”标签节点(值为2的节点)必须替换为标签“ rock”。 任何解决方案的建议,将不胜感激。 感谢和最诚挚的问候,加夫。
您可以通过以下一种方式查看它:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="cat" match="mt" use="count(preceding-sibling::mt)" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="r">
<xsl:element name="{key('cat', count(preceding-sibling::r))}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element >
</xsl:template>
</xsl:stylesheet>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.