基于元素名称的子串节点的XSLT选择(XSLT Selection of Nodes Based o

2019-10-16 14:28发布

我怎样才能与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模板匹配属性的表达,或应用模板中选择属性表达式,正则表达式适用于该元素的名称。 但也许这离不开像一个声明了一些结构来完成?

任何帮助,将不胜感激。

Answer 1:

下面是一些XSL是发现与“富”开始的元素,让你开始。 我不认为正则表达式的功能被添加到XSLT 2.0基于正则表达式在XSLT 2匹配 。

<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>


文章来源: XSLT Selection of Nodes Based on Substring of Element Name
标签: xslt