我遇到了一个场景,我需要删除只有外部标头标记中的“if”条件的标记,而不是 DATA 标记....是摘录:
<Header>
<xsl:if test="Name">
<xsl:for-each select="Name">
<Name>
<xsl:value-of select="."/>
</Name>
</xsl:for-each>
</xsl:if>
<xsl:if test="aaa">
<Code>
<xsl:value-of select="xxxx"/>
</Code>
</xsl:if>
</Header>
<Data>
<xsl:if test="Name">
---------
</xsl:if>
<xsl:if test="aaa">
------
</xsl:if>
</Data>
输出应为:
<Header>
<xsl:for-each select="Name">
<Name>
<xsl:value-of select="."/>
</Name>
</xsl:for-each>
<Code>
<xsl:value-of select="xxxx"/>
</Code>
</Header>
<Data>
<xsl:if test="Name">
---------
</xsl:if>
<xsl:if test="aaa">
------
</xsl:if>
</Data>
请告知。
答案 0 :(得分:0)
执行带有异常的标识转换,即如果它是xsl:if
元素的子元素,则删除Header
语句。请注意,您还需要显式匹配xsl:if
的属性,否则转换将失败。
假设输入正确(一个名为root
的文档节点带有XSL名称空间且输入XML中没有“-------”),这是一种方法。
对于您将来的问题,请务必始终显示您的努力,这是您自己尝试解决问题的方法。否则人们不会总是愿意帮助你。
<强>样式表强>:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="xsl:if[parent::Header]|xsl:if[parent::Header]/@*">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
</xsl:stylesheet>
<强>输出强>:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<Header>
<xsl:for-each select="Name">
<Name>
<xsl:value-of select="."/>
</Name>
</xsl:for-each>
<Code>
<xsl:value-of select="xxxx"/>
</Code>
</Header>
<Data>
<xsl:if test="Name"><!--further processing--></xsl:if>
<xsl:if test="aaa"><!--further processing--></xsl:if>
</Data>
</root>