我是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(.)
的良好结果,即包含函数,但它不起作用。
你能帮我吗?
答案 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>