2017-12-04 12 views
1

私には要素が2つあり、[ - ]で区切られています。例えば120-125です。xml要素から正規表現を使用して数値を取得する

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

どのように私はこれを達成することができます 今、私はこれらの2つの数値を取得し、これらの値を持つXML要素を作成したい、そして最終的に私はこのような何かをしたい、XSLTを使用していますか?

このようなルックスを変更するには、EDIT

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

ますを持つことはできませんinside <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

''の値を ''の子ノードに分割する答えを変更しました –

関連する問題