在父节点中添加一个新节点,该节点使用xslt中的文本进行更新

时间:2017-05-15 08:59:28

标签: xml xslt

我通过覆盖子节点更新了我的XML。现在我需要为标签添加一个新节点。

我的XML是:

<GrandParent>
<Parent>
    <Child1>test</Child1>
    <Child2>abc</Child2>
    <Child3>62</Child3>
    <Child4>5000061</Child4>
</Parent>
 <Parent>
        <Child1>test</Child1>
        <Child2>abc</Child2>
        <Child3>33</Child3>
        <Child4>5560853</Child4>
 </Parent>
</GrandParent>

并更新了第一个标签,如下所示:

<GrandParent>
<Parent>
    <Child1>test</Child1>
    <Child2>abc</Child2>
    <Child3>62</Child3>
    <Child3 >dshgfshgfhgf</Child3>
    <Child4>5000061</Child4>
</Parent>
 <Parent>
        <Child1>test</Child1>
        <Child2>abc</Child2>
        <Child3>33</Child3>
        <Child3>dshgfshgfhgf</Child3 >
        <Child4>5560853</Child4>
 </Parent>
</GrandParent>

使用XSLT:

<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="*"/>

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

<xsl:template match="Parent[Child4='5000061']/Child3[.='62']">
    <Child3>dshgfshgfhgf</Child3>
</xsl:template>

</xsl:stylesheet>

现在我想在两个父标签中添加一个新节点。如何在不打扰当前代码的情况下做到这一点?

2 个答案:

答案 0 :(得分:0)

  

我想在两个父标签中添加一个新节点。

添加与父项匹配的模板并在其中添加新节点 - 例如:

<xsl:template match="Parent">
    <xsl:copy>
        <xsl:apply-templates/>
        <new-node>123</new-node>
    </xsl:copy>
</xsl:template>

答案 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="*"/>

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

<xsl:template match="Parent[Child4='5000061']/Child3[.='62']">
    <Child3>dshgfshgfhgf</Child3>
</xsl:template>

<xsl:template match="Parent">
    <xsl:copy>
        <xsl:apply-templates/>
        <new-Child>123</new-Child>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

Child3节点仅在满足条件时才会更改,否则它将保持不变。如果您将所有Child3替换为相同的值,则为"Parent[Child4]/Child3"