我有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
答案 0 :(得分:0)
您可以尝试使用所需的前缀而不是使用namespace
属性明确地创建属性QName:
<xsl:attribute name="xsi:{local-name()}"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
select="."/>