代码之家  ›  专栏  ›  技术社区  ›  chernevik

基于元素名称子字符串的节点XSLT选择

  •  1
  • chernevik  · 技术社区  · 15 年前

    如何使用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>
    

    这里我想选择处理那些名称与regex匹配的节点,比如“foo.*”。

    我想我需要一个XSLT模板匹配属性表达式,或者一个应用模板选择属性表达式,它将regex应用于元素的名称。但是,如果没有像语句这样的构造,这可能无法完成?

    任何帮助都将不胜感激。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Kevin Hakanson    15 年前

    下面是一些XSL,它可以查找以“foo”开头的元素,以帮助您开始。我认为在基于XSLT2.0的 Regular Expression Matching in 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>