2017-03-08 81 views
2

我試圖解析出各種html文件中mac上特定標記之間的文本。我正在尋找第一個<H1>標題在身體。例如:xmllint解析html文件

<BODY> 
<H1>Dublin</H1> 

對此使用正則表達式我相信是反模式,所以我用xmllint和xpath來代替。

xmllint --nowarning --xpath '/HTML/BODY/H1[0]' 

問題是一些HTML文件包含嚴重形成的標籤。所以我得到

parser error : Opening and ending tag mismatch: UL line 261 and LI 
</LI> 

問題的線條錯誤是我不能只是做,2>/dev/null的話,我完全失去這些文件。有沒有什麼辦法,我可以在這裏使用XPath表達式,只是說,如果XML不完美,放鬆一下,只要給我第一個H1標題之間的值?

回答

4

嘗試--html選項。否則,xmllint會將您的文檔解析爲比HTML更嚴格的XML。另請注意,XPath索引是基於1的,並且在解析時HTML標記將轉換爲小寫。該命令

xmllint --html --xpath '/html/body/h1[1]' - <<EOF 
<BODY> 
<H1>Dublin</H1> 
EOF 

打印

<h1>Dublin</h1> 
+0

我得到更多的不匹配,當我做到這一點。而不是./myfile.html:131:分析器錯誤:打開和結束標記不匹配:UL行127和LI我得到HTML分析器錯誤:打開和結束標記不匹配:ul和td –

+1

@MoreThanFive libxml2的HTML分析器不是很寬容。 '--recover'選項可能有助於您已經發現的'--nowarning'。 – nwellnhof

+0

可能另一種工具更好嗎? – Thufir