Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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 如何向DOM的根元素添加名称空间声明?_Java_Xml_Dom_Xml Namespaces - Fatal编程技术网

Java 如何向DOM的根元素添加名称空间声明?

Java 如何向DOM的根元素添加名称空间声明?,java,xml,dom,xml-namespaces,Java,Xml,Dom,Xml Namespaces,我需要好的,真的会爱。。。向DOM树的根元素添加命名空间声明。 我后来在文档中反复使用该名称空间,在使用它的每个节点中都有声明不是很方便: <?xml version="1.0" encoding="UTF-8" standalone="no"?><test> <value xmlns:test="urn:mynamespace" test:id="1">42.42</value> <value2 xmlns:test="urn:

我需要好的,真的会爱。。。向DOM树的根元素添加命名空间声明。 我后来在文档中反复使用该名称空间,在使用它的每个节点中都有声明不是很方便:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><test>
   <value xmlns:test="urn:mynamespace" test:id="1">42.42</value>
   <value2 xmlns:test="urn:mynamespace" test:id="2">Hello Namespace!</value2>
</test>
我想要的是

<?xml version="1.0" encoding="UTF-8" standalone="no"?><test xmlns:test="urn:mynamespace">
   <value test:id="1">42.42</value>
   <value2 test:id="2">Hello Namespace!</value2>
</test>
这在以后手工编辑时更加方便

我知道这是可能的,因为这是我加载包含

<test xmlns:test="urn:mynamespace">
</test>
并添加剩余的节点

因此,我认为问题归结为: 如何将xmlns:test=urn:mynamespace添加到根节点?当我尝试添加属性时,我会得到一个名称空间错误异常,我使用名称空间感知工厂,等等。因为我试图绕过我找不到的API来处理名称空间


注意:根元素中没有使用名称空间的属性。如果我允许,我可以让它工作,但只需要名称空间声明。

使用此XSLT文档

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:test="urn:mynamespace">

<xsl:output indent="yes" standalone="no" encoding="UTF-8"/>

<!-- Copies root element and its contents -->
<xsl:template match="/*" priority="2">
    <xsl:element name="{name()}" namespace="{namespace-uri()}">
        <xsl:copy-of select="namespace::*"/>
        <xsl:copy-of select="document('')/*/namespace::*[name()='test']"/>
        <xsl:copy-of select="@*"/>
        <xsl:copy-of select="*"/>
    </xsl:element>
</xsl:template>

<!-- Copies comments, processing instructions etc. outside
     the root element. This is not neccesarily needed. -->
<xsl:template match="/node()">
    <xsl:copy-of select="."/>
</xsl:template>

</xsl:stylesheet>

其中xsltFile是指向该XSLT文件的文件对象。

doc.getDocumentElement.setAttributeNS,xmlns:test,urn:mynamespace;另见
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<test>
   <value xmlns:test="urn:mynamespace" test:id="1">42.42</value>
   <value2 xmlns:test="urn:mynamespace" test:id="2">Hello Namespace!</value2>
</test>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<test xmlns:test="urn:mynamespace">
  <value test:id="1">42.42</value>
  <value2 test:id="2">Hello Namespace!</value2>
</test>
javax.xml.transform.Source xsltSource = new javax.xml.transform.stream.StreamSource(xsltFile);
Transformer transformer = TransformerFactory.newInstance().newTransformer(xsltSource);