2017-10-13 28 views
0

我正在写一个java程序,在某些情况下我必须执行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函数(javax.xml.transform。), 我没有得到任何错误, 属性-type-被创建 但它是空的。

是否必须做一些与XSLT版本是我的xslt不兼容1.0? 我怎样才能绕过这个?

回答

1

如果使用XSLT 1.0,那么代码需要这个样子,因为select是无效的xsl:attribute在XSLT 1.0

<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> 
+1

我怀疑样式表说版本=“2.0”,并正在与一个1.0处理器上运行。一个1.0版本的处理器提供了一个版本=“2.0”的样式表,应该忽略它不理解的所有属性,这可以解释这里没有任何错误。 –