我如何选择一个标签,并复制每个孩子期望的东西,并给一个新的父母



我需要选择一个标签与他的所有子标签,但我需要删除一个特殊的标签什么可以在"主"标签的任何地方。在我的例子中的"主"标签是Deeper2,我需要删除所有的"ShouldDelete"标签与他的值(所以删除那一行)。在我可以清除这个选定的标签后,我需要把它放在一个新的"边界"。我的xml像这样:

<Edge>
    <Deeper>
        <Deeper2>
            <Something>..</Something>
            <Something2>..</Something2>
            <Something3>..</Something3>
            <Something4>..</Something4>
            <Something5>
                <Something6>..</Something6>
                <Something7>..</Something7>
                <ShouldDelet>..</ShouldDelet>
            </Something5>
            <Something8>..</Something8>
            <Something9>..</Something9>
            <Something10>
                <Something6>..</Something6>
                <ShouldDelet>..</ShouldDelet>
            </Something10>
            <ShouldDelet>..</ShouldDelet>
        </Deeper2>
    </Deeper>
</Edge>

And i need this

<Deeper2>
    <Something>..</Something>
    <Something2>..</Something2>
    <Something3>..</Something3>
    <Something4>..</Something4>
    <Something5>
        <Something6>..</Something6>
        <Something7>..</Something7>
    </Something5>
    <Something8>..</Something8>
    <Something9>..</Something9>
    <Something10>
        <Something6>..</Something6>
    </Something10>
</Deeper2>

毕竟需要把它放在一个新的"border"中,像这样:

<MyNewTag>
    <MyNewTag2>
        <Deeper2>
            <Something>..</Something>
            <Something2>..</Something2>
            <Something3>..</Something3>
            <Something4>..</Something4>
            <Something5>
                <Something6>..</Something6>
                <Something7>..</Something7>
            </Something5>
            <Something8>..</Something8>
            <Something9>..</Something9>
            <Something10>
                <Something6>..</Something6>
            </Something10>
        </Deeper2>
    </MyNewTag2>
</MyNewTag>

您需要一个标识模板(基本上是输入的精确副本)和覆盖模板。以下样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:strip-space elements="*"/>
    <xsl:output indent="yes"/>
    <!-- identity template -->
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Edge">
        <MyNewTag>
            <xsl:apply-templates/>
        </MyNewTag>
    </xsl:template>
    <xsl:template match="Deeper">
        <MyNewTag2>
            <xsl:apply-templates/>
        </MyNewTag2>
    </xsl:template>
    <!-- an empty match deletes the node -->
    <xsl:template match="ShouldDelet"/>
</xsl:stylesheet>

应用于输入XML时,生成:

<?xml version="1.0" encoding="utf-8"?>
<MyNewTag>
   <MyNewTag2>
      <Deeper2>
         <Something>..</Something>
         <Something2>..</Something2>
         <Something3>..</Something3>
         <Something4>..</Something4>
         <Something5>
            <Something6>..</Something6>
            <Something7>..</Something7>
         </Something5>
         <Something8>..</Something8>
         <Something9>..</Something9>
         <Something10>
            <Something6>..</Something6>
         </Something10>
      </Deeper2>
   </MyNewTag2>
</MyNewTag>

最新更新