gpt4 book ai didi

java - 如何使用声明的命名空间创建 XML?

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:56 25 4
gpt4 key购买 nike

我正在使用 java 创建 xml 请求。我是使用 java 创建 xml 的新手。

这里是代码:

Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("UserRequest");
rootElement.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:ns0", "https://com.user.req");
rootElement.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
doc.appendChild(rootElement);

// user element
Element user = doc.createElement("User");
rootElement.appendChild(user);

// userAttributes element
Element userAttr = doc.createElement("UserAttributes");
rootElement.appendChild(userAttr);


// name elements
Element name = doc.createElement("Name");
name.appendChild(doc.createTextNode("hello"));
userAttr.appendChild(name);
// value elements
Element value = doc.createElement("Value");
name.appendChild(doc.createTextNode("dude"));
userAttr.appendChild(value);

预期输出:

<?xml version="1.0" encoding="UTF-8"?>
<UserRequest
xmlns:ns0="https://com.user.req"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="ns0:UserRequest">
<User/>
<UserAttributes>
<Name>hello</Name>
<Value>dude</Value>
</UserAttributes>
</UserRequest>

生成的输出:

<?xml version="1.0" encoding="UTF-8"?>
<UserRequest
xmlns:ns0="https://com.user.req"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

<User/>
<UserAttributes>
<Name>hello</Name>
<Value>dude</Value>
</UserAttributes>
</UserRequest>

如何获取正确的命名空间(如预期部分所示)。

最佳答案

生成的输出中的命名空间没有任何问题。然而,这是一个意外......您正在使用 setAttributeNS()做一些不该做的事情。

阅读 XML 命名空间声明和命名空间前缀。这比试图逐条解释为什么你没有得到你所期望的要容易得多。例如,xmlns 不是命名空间前缀,xsi:type 也不是命名空间。

不要像普通属性一样尝试创建所需的命名空间声明,而是删除这两行

rootElement.setAttributeNS("http://www.w3.org/2000/xmlns/",
"xmlns:ns0", "https://com.user.req");
rootElement.setAttributeNS("http://www.w3.org/2000/xmlns/",
"xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");

而是使用

rootElement.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance",
"xsi:type", "ns0:UserRequest");

这应该会为您提供大部分预期的输出,除了 ns0 命名空间前缀声明。它不会生成该内容,因为您没有在任何元素或属性上使用 ns0。您是否想拥有

<ns0:UserRequest ...

在你的预期输出中?

关于java - 如何使用声明的命名空间创建 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34862775/

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