xmllint解析html文件
问题描述:
我试图解析出各种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标题之间的值?
答
尝试--html
选项。否则,xmllint
会将您的文档解析为比HTML更严格的XML。另请注意,XPath索引是基于1的,并且在解析时HTML标记将转换为小写。该命令
xmllint --html --xpath '/html/body/h1[1]' - <<EOF
<BODY>
<H1>Dublin</H1>
EOF
打印
<h1>Dublin</h1>
我得到更多的不匹配,当我做到这一点。而不是./myfile.html:131:分析器错误:打开和结束标记不匹配:UL行127和LI我得到HTML分析器错误:打开和结束标记不匹配:ul和td –
@MoreThanFive libxml2的HTML分析器不是很宽容。 '--recover'选项可能有助于您已经发现的'--nowarning'。 – nwellnhof
可能另一种工具更好吗? – Thufir