2013-11-04 34 views
3

我有下面的XML與SOAP信封作爲Java String如何使用JDOM刪除soap信封並將其餘的XML作爲字符串返回?

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

我希望能夠使用hamcrest並在其上的XML的匹配器擴展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:內容已經有現有父 「肥皂:身體」

我有一個類似的設置,我打電話

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

但返回整個XML包括肥皂信封。

我需要做些什麼才能從我的XML中使用JDOM剝離肥皂信封並獲得String

獎金的問題:

  • 是否有一個很好的介紹/教程JDOM 2? (該網站似乎只有JavaDocs,這使得它開始有點困難...)
  • 我意識到使用JDOM可能在這一個頂端。有關如何以更簡單的方式做到這一點的任何建議?

回答

2

JDOM內容可以同時被連接到唯一的一個父(元素/文件)。您的響應已經附加到soap命名空間中的父元素'Body'。

你要麼需要分離的反應從它的父,或者你需要克隆它,並創建一個新的實例.....在這種情況下,detach()是你的朋友:

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

爲maintainder在JDOM項目中,我很自然地推薦你使用它,所以要把它用在適當的偏見水平上。

至於JDOM的介紹/教程,你說得對,這不是太棒了,但是,the FAQ is useful,並且我在github wiki here上設置了「引物」。如果您有任何疑問,jdom-interest郵件列表處於活動狀態,並且我會定期在計算器中監視jdomjdom-2標記。

相關問題