2012-02-23 70 views
3

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

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

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

NTX- 一个 -20120131-0006

我不精通的XPath,所以我挣扎放在一起一个表达式,但是我假设我需要使用子字符串(在|之前)。我只是不知道如何。

示例XML:

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

编辑:

我使用XSLT 1.0

+0

哪个版本的xslt? 1或2? – mindandmedia 2012-02-23 18:45:20

+0

我使用的是xslt 1. – Steve 2012-02-23 18:46:46

回答

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

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

完美,谢谢。 – Steve 2012-02-23 19:03:37

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> 

,但我无法测试这个

1

如果使用XSLT 2.0,那么更好的表达应该是:

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

但是,如果你被卡住XSLT 1,然后用Aepheus的答案去。