2017-11-06 16 views
0

ちょっと、XMLファイルで問題が発生しました。 私はここでいくつかの助けを受けましたが、その後私は別の問題に来ました。 XMLファイルの最初の要素を選択して別の位置にコピーしようとしました。xslでXMLから要素を1つ選択するにはどうすればよいですか?

これはオリジナルである:私は一部/*/product/OrderingInformation/item[1] で項目を選択しようとしている

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes" method="xml"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 
    </xsl:template> 
     <xsl:template match="OrderingInfo"> 
     <xsl:copy-of select="."/> 
     <varitems></varitems> 
    </xsl:template> 
    <xsl:template match="varitems"> 
     <xsl:copy> 
      <xsl:for-each select="ancestor::product/OrderingInfo/item"> 
       <item> 
        <varno><xsl:value-of select="/*/product/OrderingInfo/item[1]"/></partno> 
        <vartitle><xsl:value-of select="normalize-space(translate(substring-after(current(),' '),'()',''))"/></vartitle> 
       </item> 
      </xsl:for-each> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

でそれをtrieb

<products> 
    <product> 
     <OrderingInfo> 
      <item name="Part No.">12345 (text)</item> 
      <item name="Part No.">12345IP (text)</item> 
     </OrderingInfo> 
     <varitems> 
      <item> 
       <varno>14205</varno> 
       <text>text</text> 

      </item> 
      <item> 
       <varno>14205</varno> 
       <text>text</text> 
      </item> 
     </varitems> 
    </product> 

    <product> 
     <OrderingInfo> 
      <item name="Part No.">001</item> 
      <item name="Part No.">002</item> 
     </OrderingInfo> 
     <varitems> 
      <item> 
       <varno>001</varno> 
       <text>text</text> 
      </item> 
      <item> 
       <varno>001</varno> 
       <text>text</text> 
      </item> 
     </varitems> 
    </product> 
</products> 

しかし:

<products> 
    <product> 
     <OrderingInfo> 
      <item name="Part No.">12345 (text)</item> 
      <item name="Part No.">12345IP (text)</item> 
     </OrderingInfo> 
     <varitems> 
     </varitems> 
    </product> 

    <product> 
     <OrderingInfo> 
      <item name="Part No.">001 (text)</item> 
      <item name="Part No.">002 (text)</item> 
     </OrderingInfo> 
     <varitems> 
     </varitems> 
    </product> 
</products> 

所望の出力常にOrderingInfoの最初の行を選択し、fiから最初の商品

+0

"14205"は出力のどこにありますか?それは実際には "12345"でしょうか? –

+0

ああ、すみません、それはすべきです12345 – NeunNatter

答えて

0

私はあなたが探している表現はこれだと思います(つまり、現在のノードの親の下にある最初のitemを取得してください)。

<varno> 
    <xsl:value-of select="substring-before(../item[1], ' ')"/> 
</varno> 
+0

ありがとう、それは – NeunNatter

+0

もう1つの質問はXMLファイルに要素を追加することは可能ですか? ' ます。 ます。 私は' 'をそのコードで追加しようとしていました '(メインコードの編集を参照してください)、それ以外はvaritemsだけを追加します。 – NeunNatter

関連する問題