【问题标题】:XPath SubstringXPath 子字符串
【发布时间】:2012-02-23 18:43:55
【问题描述】:

我有一个需要使用 XSL 脚本转换的 XML 文件。

以下是一个示例供稿。我需要提取 NameLabel 元素中的文本,但我只需要前两个破折号之间的文本。

例如,我想要下面字符串中的A

NTX-A-20120131-0006

我不太精通 XPath,所以我很难将表达式组合在一起,但是我假设我需要使用 substring-(after|before)。我只是不确定如何。

示例 XML:

<NewsML>
    <NewsItem>
        <Identification>
            <NameLabel>NTX-A-20120131-0006</NameLabel>
        </Identification>
    </NewsItem>
</NewsML>

编辑:

我正在使用 xslt 1.0

【问题讨论】:

  • 哪个版本的 xslt? 1 还是 2?

标签: xml xslt xpath


【解决方案1】:
substring-before(s1,s2) and substring-after(s1,s2) would work.

substring-before(substring-after(NewsML/NewsItem/Identification/NameLabel,'-'),'-')

【讨论】:

    【解决方案2】:

    试试

    <xsl:template match="/">
      <xsl:apply-templates select="NewsItem/NewsML/Identification"/>
    </xsl:template>
    
    <xsl:template match="Identification">
        <xsl:value-of select="substring-before(substring-after(NameLabel,'-'),'-'))"/>
    </xsl:template>
    

    但我无法测试这个

    【讨论】:

      【解决方案3】:

      如果您使用的是 XSLT 2.0,那么更好的表达方式是:

      fn:replace( NewsItem/NewsML/Identification, "^.*-(.)-.*$", $1)
      

      但是,如果您坚持使用 XSLT 1,那么请选择 Aepheus 的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        • 1970-01-01
        • 2020-06-10
        • 1970-01-01
        • 2011-05-18
        • 2018-12-17
        相关资源
        最近更新 更多