如何使用XSLT根据节点元素名称的子字符串选择节点?
例如,考虑XML:
<foo_bar>Keep this.
<foo_who>Keep this, too.
<fu_bar>Don't want this.</fu_bar>
</foo_who>
</foo_bar>
我想从中输出:
<foo_bar>Keep this.
<foo_who>Keep this, too.
</foo_who>
</foo_bar>
在这里,我想选择处理名称与“foo。*”等正则表达式匹配的节点。
我认为我需要一个XSLT模板匹配属性表达式,或者一个apply-templates select属性表达式,它将正则表达式应用于元素的名称。但是如果没有像声明这样的构造,这可能无法实现吗?
任何帮助都将不胜感激。
答案 0 :(得分:2)
以下是一些XSL,它找到以“foo”开头的元素,以帮助您入门。我不认为在基于Regular Expression Matching in XSLT 2的XSLT 2.0之前添加了正则表达式功能。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<xsl:variable name="name" select="local-name()"/>
<xsl:if test="starts-with($name, 'foo')">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
它给出了这个输出,它似乎有一个额外的换行符。
<foo_bar>Keep this.
<foo_who>Keep this, too.
</foo_who>
</foo_bar>