Java的XML转换从nsi

时间:2016-06-22 08:13:57

标签: java xml xslt-2.0 transformation

我有xslt元素,我用于XML转换。

<xsl:attribute name="{name()}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" namespace="http://www.w3.org/2001/XMLSchema-instance">
                                <xsl:value-of select="." />
                            </xsl:attribute>

然而,在转换之后,XML看起来如下

<TEST xmlns:ns1="http://www.w3.org/2001/XMLSchema-instance" ns1:nil="true"/>

而不是xmlns:nsi它将其更改为xmlns:ns1和其他元素xmlns:ns0

之前是否有人遇到此问题。当我转换虽然eclipse输出是正确的,但如果我使用java代码转换它,它改变xmlns前缀与ns0 ns1等...

下面是我的转换java代码。

 StringWriter sw = new StringWriter();
javax.xml.transform.Result result = new javax.xml.transform.stream.StreamResult(sw);
TransformerFactory transFact = TransformerFactory.newInstance();
Transformer trans = transFact.newTransformer(xsltSource);

trans.transform(xmlSource, result);

经过进一步分析,当我使用独立的java程序进行转换时,输出如下(正如预期的那样)

<TEST xmlns:nsi="http://www.w3.org/2001/XMLSchema-instance" nsi:nil="true"/>

但如果我在服务器上运行它,输出如下

<TEST xmlns:ns1="http://www.w3.org/2001/XMLSchema-instance" ns1:nil="true"/>

xmlns:xsi已被xmlns:xs1

取代

1 个答案:

答案 0 :(得分:0)

您可以尝试使用所需的前缀而不是使用namespace属性明确地创建属性QName:

<xsl:attribute name="xsi:{local-name()}" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     select="."/>