XPath子串

时间:2012-02-23 18:43:55

标签: xml xslt xpath

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

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

例如,我希望下面字符串中的A

NTX-的 A -20120131-0006

我不熟悉XPath,所以我很难将表达式组合在一起,但是我假设我需要使用substring-(之前的|之后)。我只是不确定如何。

示例XML:

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

编辑:

我正在使用xslt 1.0

3 个答案:

答案 0 :(得分:8)

substring-before(s1,s2) and substring-after(s1,s2) would work.

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

答案 1 :(得分:1)

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

但是我无法测试这个

答案 2 :(得分:1)

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

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

但是如果你遇到XSLT 1,那就去Aepheus的答案。