2017-10-13 11 views
0

私はxslt変換を実行する必要があるJavaプログラムを作成しています。javaのxslt変換、属性値が符号化されていない

この場合、作業のレベルでtypeという名前の属性を追加する必要があります。 その値は要素のNS2の値と同じでなければならない:例えばtype_work

<ns2:work> 
    <ns2:type_work>PROP</ns2:type_work> 
    <ns2:identifier_work>2017/375/943030</ns2:identifier_work> 
<ns2:work> 

は、私は、次のXSLT

<xsl:template match="ns2:work"> 
    <ns2:work> 
     <xsl:attribute name="type" select="ns2:type_work/node()" /> 
     <xsl:apply-templates select="@*|child::node()" /> 
    </ns2:work> 
</xsl:template> 
を行った

<ns2:work type="PROP"> 
    <ns2:type_work>PROP</ns2:type_work> 
    <ns2:identifier_work>2017/375/943030</ns2:identifier_work> 
<ns2:work> 

なるはずです

と私はそれを適切なjava functios(javax.xml.transform。)、エラーが発生しません。 属性-type-が作成されました。 ですが、空です。

XSLTバージョンで何かする必要がありますか?私のxsltは1.0と互換性がありません。 これを回避するにはどうすればよいですか?

答えて

1

あなたがXSLT 1.0を使用している場合selectは、XSLT 1.0

<xsl:attribute name="type"> 
    <xsl:value-of select="ns2:type_work/node()" /> 
</xsl:attribute> 

(あなたはちょうどここに<xsl:value-of select="ns2:type_work" />を行うことができますことに注意してください)

xsl:attributeに有効ではないとして、その後のコードは、次のようになりする必要があります

属性値テンプレートを使用する

<ns2:work type="{ns2:type_work}" /> 
    <xsl:apply-templates select="@*|child::node()" /> 
</ns2:work> 
+1

スタイルシートにversion = "2.0"と表示され、1.0プロセッサで実行されている可能性があります。 version = "2.0"というスタイルシートが与えられている1.0のプロセッサは、理解できないすべての属性を無視することになっています。これは、ここにエラーがないことを説明します。 –

関連する問題