java中的xslt转换,未编码的属性值

时间:2017-10-13 13:03:18

标签: java xml xslt

我正在编写一个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>

应该成为

<ns2:work type="PROP">
     <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>

我使用正确的java functios(javax.xml.transform。)来应用它, 我没有错, 属性-type-已创建 但它是空的。

是否必须对XSLT版本执行某些操作是我的xslt与1.0不兼容? 我怎么能绕过这个?

1 个答案:

答案 0 :(得分:1)

如果您使用的是XSLT 1.0,则代码需要如下所示,因为select在XSLT 1.0中的xsl:attribute上无效

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

(请注意,您可以在此处<xsl:value-of select="ns2:type_work" />

更好的是,使用属性值模板

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