gpt4 book ai didi

java - JDOM2 - 两个命名空间

转载 作者:数据小太阳 更新时间:2023-10-29 02:06:18 25 4
gpt4 key购买 nike

我正在尝试构建以下 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>

如果尝试将其添加为属性,它会抛出错误消息,指出我不能使用名称为“xmlns”的属性

那么我如何使用 JDOM 构建一个像上面那样的 XML?

最佳答案

诀窍在于,对于命名空间,您必须为添加的所有元素正确指定它。

此外,默认 namespace 是声明为 xmlns="...." 而不是 xmlns:abc="..."

当您使用默认 namespace 时,它在元素上没有“前缀”。所以从你的示例代码中你有:

  • 默认命名空间:xmlns="urn:URI"
  • “i”命名空间: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>

关于java - JDOM2 - 两个命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26142278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com