我正在尝试构建以下XML结构:
<EDIOrderPackage xmlns="urn:URI" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Version>1.0.0.0</Version>
<Test>true</Test>
</EDIOrderPackage>
我使用JDOM2并且不知道如何添加2个命名空间!
即使我只设置了一个命名空间,结果也不像我希望的那样。
如果我按root.setNamespace()
设置命名空间并使用前缀为i的第二个,它看起来像这样:
<i:EDIOrderPackage mlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Version>1.0.0.0</Version>
<Test>true</Test>
<i:/EDIOrderPackage>
所以在EDIPOrderPackage之前有一个i。
如果我不使用前缀,则如下所示:
<EDIOrderPackage xmlns="urn:URI">
<Version xmlns="">1.0.0.0</Version>
<Test xmlns="">true</Test>
</EDIOrderPackage>
如果尝试将其添加为属性,则会抛出错误消息,即我不能使用名称&#34; xmlns&#34;
那么如何用JDOM构建一个类似于上面那个的XML呢?
答案 0 :(得分:4)
诀窍在于,使用命名空间,您必须为添加的所有元素正确指定它。
此外,默认名称空间是声明为xmlns="...."
而非xmlns:abc="...."
当您使用默认命名空间时,它没有&#39;前缀&#39;在元素上。所以从您的示例代码中可以看出:
xmlns="urn:URI"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
您可以使用JDOM创建这些:
Namespace nsDefault = Namespace.getNamespace("urn:URI");
Namespace nsI = Namespace.getNamespace("i", "http://www.w3.org/2001/XMLSchema-instance");
现在,在创建元素时,必须将它们放在正确的命名空间中:
Element root = new Element("EDIOrderPackage", nsDefault);
Element version = new Element("Version", nsDefault);
Element test = new Element("Test", nsDefault);
root.addNamespaceDeclaration(nsI); // add the i namespace declaration.
root.addContent(version);
root.addContent(test);
如果您添加XMLOutputter方面的事情:
Document doc = new Document(root);
XMLOutputter xout = new XMLOutputter(Format.getPrettyFormat());
xout.output(doc, System.out);
上面的代码生成输出
<?xml version="1.0" encoding="UTF-8"?>
<EDIOrderPackage xmlns="urn:URI" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Version />
<Test />
</EDIOrderPackage>