2012-02-23 4 views
3

XSL 스크립트를 사용하여 변환해야하는 XML 파일이 있습니다.XPath 하위 문자열

다음은 피드의 예입니다. NameLabel 요소의 텍스트를 추출해야하지만 처음 두 개의 대시 사이의 텍스트 만 필요합니다.

예를 들어, 나는 아래의 문자열의 A 원하는 :

NTX- 내가 잘 XPath를에 정통한 아니에요, 그래서 함께 넣어 어려움을 겪고 있어요 -20120131-0006

표현식, 그러나 나는 substring- (before | before)를 사용할 필요가 있다고 가정한다. 어떻게 잘 모르겠다.

샘플 XML :

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

편집 :

내가 XSLT 1.0

+0

어떤 버전의 xslt? 1 또는 2? – mindandmedia

+0

나는 xslt 1을 사용하고있다. – Steve

답변

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

substring-before(substring-after(NewsML/NewsItem/Identification/NameLabel,'-'),'-') 
을 테스트 할 수 있습니다

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

을하지만 XSLT 1로 붙어있는 경우, 다음 Aepheus의 답을 이동 :

+0

완벽, 고마워. – Steve

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을 사용하는 경우, 더 좋은 표현이 될 것이다.