繁体   English   中英

转换XML替换节点

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM