2017-03-08 84 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