2008-12-09 23 views
3

我正在使用XPath在模板中定位節點(或與之相近的節點),該模板具有大約10個級別的非格式良好的HTML深。 (不,我沒有寫這個HTML ...但我已經被委託來挖掘它。)在非格式良好的HTML中使用XPath查找節點(或接近它)

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

是否有任何XPath工具可以幫助您瞭解非常好的HTML格式。

回答

4

XPath表達式不能用非格式化的XML文檔進行評估,這正是所描述的情況。

可以在兩個鏈接步驟中執行此操作,第一步是將HTML轉換爲格式良好的XML,然後是第二步 - 應用XPath表達式。

因此,該問題可以更精確地表述爲「如何將HTML轉換爲XML,以便可以評估XPath表達式」。

這裏有兩個很好的工具:

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

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

  3. The pure XSLT 2.0 Parser of HTMLDavid Carlisle。閱讀它的代碼對我們每個人來說都是一個很好的學習練習。

從描述:

「d:htmlparse(字符串) d:htmlparse(字符串,命名空間,HTML模式)

的一個參數的形式是等同於) d: htmlparse(字符串,「http://ww.w3.org/1999/xhtml」,真()))

解析使用一些內置啓發式) 控制隱含開口和元件的閉合字符串作爲HTML和/或XML。

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

元素名稱小寫(如果HTML模式是真實的()),並放入該命名空間參數(其可以是「」指定到表示 無命名空間,除非輸入已顯式命名空間聲明,在 命名空間 這些將榮幸這種情況。

屬性名小寫如果HTML模式=真()」

瞭解更詳細的說明here

+0

感謝的人!我一直在尋找類似這很長一段時間! ere的很多錯誤的HTML代碼在那裏! – leeand00 2008-12-10 13:19:12

0

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

相關問題