简体   繁体   English

转换XML替换节点

[英]Transform XML replacing nodes

I need to transform a XML. 我需要转换XML。 I tried XSLT transformations unsuccessfully. 我尝试XSLT转换失败。 I am new on it. 我是新来的。

Source: 资源:

<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>

Target: 目标:

<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>

Basically, I need to replace 'r'tag nodes with the correct value of mt nodes based on the position. 基本上,我需要根据位置用mt节点的正确值替换'r'tag节点。 For instance, the first 'r' tag node(the one with value 2) must be replaced with tag 'rock'. 例如,第一个“ r”标签节点(值为2的节点)必须替换为标签“ rock”。 Any advise on the solution would be appreciate. 任何解决方案的建议,将不胜感激。 Thanks and Best Regards, Gav. 感谢和最诚挚的问候,加夫。

Here's one way you could look at it: 您可以通过以下一种方式查看它:

XSLT 1.0 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