2017-06-08 13 views
1

属性がWEIGHTのxmlサブ要素に含まれる4文字までトリムする値があります。xpath - 属性の問題付き述語

<addinfo> 
    <info type="COMMODITY_CODE">39253000</info> 
    <info type="WEIGHT">0.04700</info> 
    </addinfo> 

フルパスがdocuments/invoice/detailline/addinfo/info type="WEIGHT"

である私のテンプレートは言う:

<xsl:template match="documents/invoice/detailline/addinfo/info[@type='WEIGHT']"> 
<xsl:element name="{name()}" namespace="{namespace-uri()}"> 
    <xsl:value-of select="substring(., '0', '5')" /> 
</xsl:element> 

それは4つの文字(0.47)の合計まで値0.04700をトリミングする必要があります。代わりに、これを行うだけでなく、タイプ属性 "WEIGHT"も削除します。

出力を変換:

<addinfo> 
    <info type="COMMODITY_CODE">39253000</info> 
    <info>0.04</info> 
    </addinfo> 

答えて

2

あなたがすることを求めている正確に何やっている:同じ名前を持つ要素を作成し、その中にトリミングされた値を置きます。

<xsl:template match="documents/invoice/detailline/addinfo/info[@type='WEIGHT']"> 
    <xsl:element name="{name()}" namespace="{namespace-uri()}"> 
    <xsl:copy-of select="@*" /> 
    <xsl:value-of select="substring(., 1, 4)" /> 
    </xsl:element> 
</xsl:template> 

FYI、substring()(XPathの中や他のほとんどのもの)の番号は1から始まり、2番目と3番目のパラメータが数値である:結果でtype属性を含めるには、あなたはそれのコピーを作成することができます文字列ではありません。私は上記を修正しました。

+0

ありがとうございました。最初はうまくいきませんでした。しかし、私の間違い。あなたがそこで何をしたかわかる。どうもありがとう! – Mark