簡體   English   中英

在非格式良好的HTML中使用XPath查找節點(或接近它)

[英]Finding a node (or close to it) using XPath in non well-formed HTML

我正在使用XPath在一個模板中找到一個節點(或接近它的東西),該模板具有大約10級深度的非格式良好的HTML。 (不,我沒有寫這個HTML ......但我的任務是挖掘它。)

我似乎能夠使用Firefox的XPartner插件檢索有問題的元素的XPath; 但它只給了我在現場的位置,而不是我給出的模板。 (該模板來自非標准的服務器端腳本語言;讀取內部構建的語言)

是否有任何你知道的XPath工具特別擅長混淆非格式化的HTML。

無法對非格式良好的XML文檔評估XPath表達式 ,這正是所描述的情況。

可以通過兩個鏈式步驟完成此操作,第一步是將HTML轉換為格式良好的XML,然后是第二步 - 應用XPath表達式。

因此,問題可以更准確地說明為“如何將HTML轉換為XML,以便可以針對它評估XPath表達式”。

這是兩個很好的工具:

  1. TagSoup是一個開源程序 ,是由John Cowan開發的基於Java和SAX的工具。 這是一個用Java編寫的兼容SAX的解析器,它不是解析格式良好或有效的XML,而是解析在野外發現的HTML:糟糕,討厭和野蠻,盡管通常很短。 TagSoup專為那些必須使用某種理性應用程序設計來處理這些東西的人而設計。 通過提供SAX接口,它允許將標准XML工具應用於最差的HTML。 TagSoup還包括一個命令行處理器,它可以讀取HTML文件並生成干凈的HTML或格式良好的XML,它與XHTML非常接近。 Taggle是TagSoup的商業C ++端口。

  2. SgmlReader是微軟的Chris Lovett開發的工具。 SgmlReader是任何SGML文檔的XmlReader API(包括內置的HTML支持)。 還提供了命令行實用程序,其輸出格式良好的XML結果。 下載包含獨立可執行文件和完整源代碼的zip文件: SgmlReader.zip

  3. David Carlisle編寫的純XSLT 2.0 Parser of HTML 閱讀它的代碼對我們每個人來說都是一個很好的學習練習。

從描述:

“d:htmlparse(string)d:htmlparse(string,namespace,html-mode)

一個參數形式相當於)d:htmlparse(string,' http ://ww.w3.org/1999/xhtml',true()))

使用一些內置啟發式算法將字符串解析為HTML和/或XML,以控制元素的隱含開啟和關閉。

它沒有完整的HTML DTD知識,但有完整的空元素列表和實體定義的完整列表。 HTML實體,十進制和十六進制字符引用都被接受。 注意即使html-mode = false(),也可以識別html-entities。

元素名稱是小寫的(如果html-mode為true())並放入命名空間參數指定的命名空間(除非輸入具有明確的命名空間聲明,否則可能是“”表示無命名空間,在這種情況下,這些將被尊重。

如果html-mode = true(),屬性名稱是小寫的

在此處閱讀更詳細的說明。

XPath不能直接使用HTML。 XPath與HTML的交互由任何軟件/庫將HTML解析為渲染樹決定。 這可能有助於指導您的搜索。

暫無
暫無

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

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