Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的xslt转换,属性值未编码_Java_Xml_Xslt - Fatal编程技术网

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

java中的xslt转换,属性值未编码,java,xml,xslt,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>

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

道具
2017/375/943030
应该成为

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

道具
2017/375/943030   
我做了以下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不兼容?
我怎么能绕过这个

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

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

(请注意,您可以在此处执行

更好的方法是使用属性值模板

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

我怀疑样式表上显示的是version=“2.0”,并且正在使用1.0处理器运行。如果一个1.0处理器的样式表显示version=“2.0”,那么它应该忽略它不理解的所有属性,这可以解释这里没有任何错误。