簡體   English   中英

是否通過XPath Evaluation評估格式不正確的XML?

[英]XPath Evaluation over not well-formed XML?

我需要通過XPath評估程序傳遞一些格式不嚴格的XML。 XML實際上主要是html,它可能如下所示:

<p>
  <a href="http://www.something.com/5993810749/" title="IMG_3013”>
    <img src="5993810749_107ea7d465_m.jpg" width="240" height="160" alt="IMG_3013”/>
  </a>
</p>
<p>
  <a href="http://www.something.com/836492365986/" title="IMG_3018”>
    <img src=“8364923659_107ea3286465_m.jpg" width=“365" height=“248" alt="IMG_3018”/>
  </a>
</p>

因此,值得注意的問題是:它沒有根元素; <img>也不會終止。 用根元素包裝起來很容易,但是當我通過XPath評估器時,卻遇到了類似以下的異常:

[Fatal Error] :7:196: The element type "img" must be terminated by the matching end-tag "</img>".

順便說一句,Java中的XPath Evaluator的代碼如下:

XPath xPath = XPathFactory.newInstance().newXPath();
Object result = xPath.evaluate(xpath,
    new InputSource(new StringReader(xmlString)), XPathConstants.NODESET);

因此,我想知道,什么是處理此問題的最佳方法,以便我可以成功評估XML? 看來我至少有兩個選擇:(a)嘗試使XPath評估器更加智能; 或(b)嘗試采用一種方法來自動修復格式不正確的XML。 一個解決這個問題的辦法將不勝感激!

您可以使用HTML解析器(例如NekoHTML)解析HTML,然后在生成的DOM樹上運行XPath查詢

import org.cyberneko.html.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.Node;

DOMParser parser = new DOMParser();
parser.parse(new InputSource(new StringReader(xmlString)));
XPath xPath = XPathFactory.newInstance().newXPath();
Object result = xPath.evaluate(xpath, parser.getDocument(),
      XPathConstants.NODESET);

請注意,默認情況下,NekoHTML會生成特定的HTML DOM節點,並且這些節點將以大寫形式報告其節點名稱,而與原始輸入標簽的大小寫無關。 因此,如果您想要一個將提取所有<p>元素的XPath,則需要//P而不是//p

有幾種實用程序可以將HTML或通常帶有尖括號的任何內容轉換為格式正確的XML(它可能是也可能不是您期望的XML,但是格式正確)。 JTidy和TagSoup通常在此角色中使用。 您不必具體化XML,可以將其直接注入到處理管道的下一步,例如XSLT轉換或模式驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM