复制所有xml节点并使用XSLT重命名其中的少数节点

时间:2012-05-10 12:02:15

标签: xml xslt

我有一个XML,在那个XML中我有一个元素< storybody>它本身有几个元素,现在我想要的是复制每个< storybody>并更改< URI>标签在< storybody>与< a>。

请记住,我只需要为< storybody>执行此操作在文件中。

XML结构:

<mothertag>
     <atag>
        asdfasdfa
     </atag>

     <storybody>
        <p>sometext here<URI ref="http://google.com" /> some more text</p>
     </storybody>
</mothertag>

现在我想将此URI更改为标记。

1 个答案:

答案 0 :(得分:0)

您需要使用其他模板扩充 identity transformation 以匹配您想要重命名的节点。像这样:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*" />
    <xsl:output indent="yes" method="html" />

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>   

    <xsl:template match="URI">
        <TAG>
            <xsl:apply-templates select="@* | node()"/>
        </TAG>
    </xsl:template>

</xsl:stylesheet>

应用于(更正结束storybody标记中的拼写错误):

<mothertag>
     <atag>
        asdfasdfa
     </atag>

     <storybody>
        <p>sometext here<URI ref="http://google.com" /> some more text</p>
     </storybody>

</mothertag>

产地:

<mothertag>
   <atag>
      asdfasdfa

   </atag>
   <storybody>
      <p>sometext here
         <TAG ref="http://google.com"></TAG> some more text
      </p>
   </storybody>
</mothertag>