Java として soap エンベロープを含む次の XML があります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を使用できるようにしたいのですが、最初に石鹸の封筒を取り除きたいです。
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)));
しかし、soap エンベロープを含む XML 全体が返されました。
JDOM を使用して XML から SOAP エンベロープを取り除き、元にString
戻すにはどうすればよいですか?
おまけの質問:
- JDOM 2 の適切な紹介/チュートリアルはありますか? (Web サイトには JavaDocs しかないようで、開始するのが少し難しくなっています...)
- 私は、JDOM を使用することは、おそらくこれについては少しやり過ぎであることを理解しています。これをより簡単な方法で行う方法に関する提案はありますか?