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