gpt4 book ai didi

java - 如何使用 JDOM 删除 SOAP 信封并将 XML 的其余部分作为字符串返回?

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

我有以下 XML,带有一个 soap 信封作为 Java String:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<MyStartElement xmlns="http://www.example.com/service">
...

我希望能够使用 hamcrest 和 xml-matchers 扩展 https://code.google.com/p/xml-matchers稍后,但首先我想摆脱 SOAP 信封。

如何使用 JDOM 2.0.5 删除 soap 信封并将剩余的 XML(即以 MyStartElement 作为根开始)作为 String 取回?

我尝试了以下方法:

SAXBuilder builder = new SAXBuilder();
Document document = (Document) builder.build(toInputStream(THE_XML));
Namespace ns = Namespace
.getNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
Namespace ns2 = Namespace
.getNamespace("http://www.example.com/service");
Element response = document.getRootElement()
.getChild("Body", ns)
.getChild("MyStartElement", ns2);
System.out.println(new XMLOutputter().outputString(new Document(response)));

这将返回:线程“main”中的异常 org.jdom2.IllegalAddException:内容已经有一个现有的父级“soap:Body”

我有一个类似的设置,我调用

System.out.println(new XMLOutputter().outputString(new Document(response)));

但这会返回整个 XML,包括 soap 信封。

要使用 JDOM 从我的 XML 中剥离 soap 信封并取回 String,我需要做什么?

奖励问题:

  • 是否有关于 JDOM 2 的良好介绍/教程? (该网站似乎只有JavaDocs,这让入门有点困难...)
  • 我意识到使用 JDOM 可能有点过头了。有关如何以更简单的方式执行此操作的任何建议?

最佳答案

JDOM 内容一次只能附加到一个父元素(元素/文档)。您的响应已附加到 soap 命名空间中的父元素“Body”。

你要么需要从它的父级分离响应,要么你需要克隆它并创建一个新实例......在这种情况下,detach() 是你的 friend :

response.detach();
System.out.println(new XMLOutputter().outputString(new Document(response)));

作为 JDOM 项目的维护者,我很自然地推荐您使用它,因此请以适当的偏见程度接受它。

关于 JDOM 的介绍/教程,嗯,你是对的,它并不出色,但是,the FAQ is useful ,我在 github wiki here 上设置了一个“入门” .如果您有任何疑问,jdom-interest 邮件列表是活跃的,我会定期监控 stackoverflow 中的 jdomjdom-2 标签。

关于java - 如何使用 JDOM 删除 SOAP 信封并将 XML 的其余部分作为字符串返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19769120/

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