2017-12-04 21 views
1

두 개의 숫자가 [-]로 분리 된 요소가 있습니다 (예 : 120-125).xml 요소에서 정규식으로 숫자 얻기

<first>120</first> 
<second>125</second> 

어떻게 이것을 달성 할 수 지금은이 두 숫자를 얻을이 값을 사용하여 XML 요소를 만들려면, 그리고 마지막으로 나는 이런 식으로 뭔가를 원하는 XSLT를 사용하고 계십니까?

편집

변경 내 XML 구조는 다음과 같습니다

<issue> 
    <number>3</number> 
    <year>2017</year> 
    <article> 
     <title>Title</title> 
     <author> 
      <firstname>name</firstname> 
     </author> 
     <pages>71-72</pages> 
     <reference>reference</reference> 
    </article> 
</issue> 

XSLT :

<issue> 
    <number> 
     <xsl:value-of select="number"/> 
    </number> 
    <year> 
     <xsl:value-of select="year"/> 
    </year> 
    <xsl:for-each select="article"> 
     <article> 
      <title> 
       <xsl:value-of select="title"/> 
      </title> 
      <author> 
       <firstname> 
        <xsl:value-of select="firstname"/> 
       </firstname> 
      </author> 
      <xsl:template match="pages"> 
       <xsl:copy> 
        <first> 
         <xsl:value-of select="substring-before(., '-')" /> 
        </first> 
        <second> 
         <xsl:value-of select="substring-after(., '-')" /> 
        </second> 
       </xsl:copy> 
      </xsl:template> 
      <reference> 
       <xsl:value-of select="reference"/> 
      </reference> 
     </article> 
    </issue> 
내가 갖고 싶어

출력 XML :

<issue> 
    <number>3</number> 
    <year>2017</year> 
    <article> 
     <title>Title</title> 
     <author> 
      <firstname>name</firstname> 
     </author> 
     <first>71</first> 
     <second>71</second> 
     <reference>reference</reference> 
    </article> 
</issue> 
+0

XSLT 1.0의'substring-before()'와'substring-after()'함수를 사용하면 문자열을 분리 할 수 ​​있습니다. –

+0

XSLT 1.0을 사용하는 경우 정규식을 사용할 수 없지만 @AniketV에서 제시하는대로 쉽게 문제를 해결할 수 있습니다. –

+0

@AniketV substring-before()의 첫 번째 매개 변수로 XML 요소의 내용을 배치하려면 어떻게해야합니까? 나는 이런 식으로 시도했지만 작동하지 않습니다 : cerbin

답변

2

당신을를 가질 수 없다.안에 <xsl:for-each>. 공유 한 XSL을 고려할 때 아래와 같이 수정해야합니다. 방금 <pages> 값을 분할하는 코드를 수정했습니다. 나머지 코드는 변경되지 않습니다.

<xsl:for-each select="article"> 
    <article> 
     ... 
     <first><xsl:value-of select="substring-before(pages, '-')" /></first> 
     <second><xsl:value-of select="substring-after(pages, '-')" /></second> 
     ... 
    </article> 
</xsl:for-each> 
+0

xml 태그 사이에서 사용할 수 있습니까? 실제로 작동하지 않기 때문입니다. – cerbin

+0

질문을 편집하고 내 xml 구조를 추가했습니다. – cerbin

+0

''의 값을 ''에 대한 자식 노드로 나눕니다. –