XSLT过滤包含特定字母的XML文档

时间:2016-01-07 02:17:07

标签: xml xslt xpath contains

我是XLST的新手,我有一项任务要做。我必须过滤一个XML文档,以便只有那些名字中包含字母" a"包括在内。

结果必须包含元素的名称。例如:

如果我有以下XML:

    <?xml-stylesheet href="monfichier.xsl" type="text/xsl" ?>
    <a>
    <ab x="x"><b>Test</b><a>z</a></ab>
    <z x="x"><a>z</a></z>
    </a>

结果必须是:

   <a>
   <ab x="x"><a>z</a></ab>
   </a>

我该怎么做?我尝试使用多种方法来获得name(.)的良好结果,即包含函数,但它不起作用。

你能帮我吗?

1 个答案:

答案 0 :(得分:1)

您可以先从身份模板开始:

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

然后,一个覆盖模板,用于删除不包含a

的其他节点
<xsl:template match="*[not(contains(name(), 'a'))]"/>

因此以下样式表:

<?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" omit-xml-declaration="yes"/>

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

    <xsl:template match="*[not(contains(name(), 'a'))]"/>

</xsl:stylesheet>