2015-01-05 95 views
0

我有一個情況,其中xml(但它不是一個真正的xml數據,而是一個基於標記的自定義數據格式)從第三方服務器發送(因爲我不能更改格式並與第三方協調是很困難的。該標記看起來如下如下使用jaxb解析一個假xml

<?xml version="1.0" encoding="UTF-8"?> 
    <result>SUCCESS</result> 
    <req> 
     <?xml version="1.0" encoding="UTF-8"?> 
     <Secure> 
     <Message id="dfgdfdkjfghldkjfgh88934589345"> 
     <VEReq> 
      <version>1.0.2</version><pan>3453243453453</pan> 
      <Merchant><acqBIN>433274</acqBIN> 
      <merID>3453453245</merID> 
      <password>342534534</password> 
      </Merchant> 
      <Browser></Browser> 
     </VEReq> 
     </Message> 
    </Secure> 
    </req> 

    <id>1906547421350020</id> 
    <trackid>f68fb35c-cbc2-468b-aaf8-7b3f399b709d</trackid> 
    <ci>6</ci> 

現在我只想要結果,REQ,ID的TrackID和CI的標籤值作爲解析輸出。手段解析後,我需要REQ包含標籤內的所有內容,還有一點是req標籤嵌入了另一個xml,因爲它不是CDATA,我不能用JAXB解析它。如果我可以在文件中配置avialable標籤或其他方式,是否有人可以解析所有內容的庫?我真的不想將它們轉換爲對象,即使是以標籤作爲關鍵字和內容作爲值的hashmap也很好。但我更喜歡POJO模型(從這種xml生成一個類)。

讓我知道是否有人可以幫助我。

+0

您可能會發現'XOM'是一個很好的選擇 - 它可以被告知做最少的檢查,甚至可以用自己的[XMLReader](http://www.xom.nu/tutorial)覆蓋讀取過程。 XHTML#d0e532)。 – OldCurmudgeon

回答

1

首先使用格式良好的XML,並傳遞給您認爲合適的任何工具。 JAXB並不壞,因爲它會忽略它不知道的元素(除了根元素)。

而且由於大多數(如果不是全部的話)工具期望格式良好的XML,所以您必須首先關注將您的「錯誤」XML轉換爲「真實」XML。我首先嚐試一下諸如JTidy或JSoup之類的東西,看看它們是否有助於使非格式良好的XML格式良好。

如果它不起作用,我會嘗試在較低級別的SAX或StAX解析中破解它。您發佈的XML似乎遇到兩個問題:正文中沒有單個根元素和XML聲明。我認爲這兩個問題都可以通過一些最小的解析器黑客來解決。

而且我認爲地獄裏有一個特殊的地方爲那些發明這種非格式化XML的人們。該死的坐在那裏,並且手動將互聯網上的所有HTML文檔更正爲有效的XHTML。