我的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>
和XSLT是:
<xsl:template match="@* | node()">
<xsl:choose>
<xsl:when test="name() = 'Parent'">
<Parent>
<xsl:for-each select="*">
<xsl:copy-of select="."/>
<xsl:if test = "name() = 'Child3' and /GrandParent/Parent/Child3[text() = '62']/text() and
/GrandParent/Parent/Child4/text() = '5000061'">
<Child3>dshgfshgfhgf</Child3>
</xsl:if>
</xsl:for-each>
</Parent>
</xsl:when>
<xsl:otherwise>
<!-- skip empty and ineligible elements -->
</xsl:otherwise></xsl:choose>
</xsl:template>
结果而不是替换,我得到一个新标签,如下所示,if条件一直都是真实的:
<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>
我需要仅为第一个GrandParent标记获取条件,而不是第二个,并且还应替换Tag值,但不添加。
编辑:正确的结果应如下所示:
<GrandParent>
<Parent>
<Child1>test</Child1>
<Child2>abc</Child2>
<Child3> dshgfshgfhgf </Child3>
<Child4>5000061</Child4>
</Parent>
<Parent>
<Child1>test</Child1>
<Child2>abc</Child2>
<Child3>33</Child3>
<Child4>5560853</Child4>
</Parent>
</GrandParent>
答案 0 :(得分:0)
您的尝试因测试而失败:
/GrandParent/Parent/Child3[text() = '62']
从根节点开始,如果整个文档中至少有一个Child3
节点的值为"62"
,则为true。同样适合您的其他测试。
我建议你简化你的方法:
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="*"/>
<!-- 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>