我正在转换所有 <p>
标签并将这些节点重命名为 <Body_Text>
,条件是它们位于元素内 <body>
(使用 xsl:if
)。
我的代码正在这样做,但是它忽略了 <p>
元素之外的所有元素 <body>
,我不希望它这样做。
这是要转换的 XML:
<root>
<p>asdf</p>
<body>
<p>asdfasdf</p>
<p>asdfasdf</p>
</body>
<footer>
<p>asdf</p>
</footer>
</root>
...这是 XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>
<!-- identity rule -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Body_Text -->
<xsl:template match="p">
<xsl:if test="parent::body">
<Body_Text>
<xsl:apply-templates select="@*|node()"/>
</Body_Text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
...这是不希望的结果(省略 <p>
元素之外的所有元素 <body>
,我不希望它这样做):
<root>
<body>
<Body_Text>asdfasdf</Body_Text>
<Body_Text>asdfasdf</Body_Text>
</body>
<footer/>
</root>
这是在http://xslt.online-toolz.com/tools/xslt-transformation.php测试的。
这是我没有得到的预期结果:
<root>
<p>asdf</p>
<body>
<Body_Text>asdfasdf</Body_Text>
<Body_Text>asdfasdf</Body_Text>
</body>
<footer>
<p>asdf</p>
</footer>
</root>