ノードのIDに基づいてHTMLページからノードを選択しようとしています。外部の制限により、XPathを使用してそれを行う必要があります。
フォーラムの投稿のコンテナ要素(この場合はDelphi-PRAXiS)を取得したいと思います。ページの簡単な例を添付しました。
必要なノードは「posts」というIDのdivなので、クエリは。になります//div[@id='posts']
。問題は、結果が空のリストになることです。を使用してクエリを実行する//*[@id='posts']
と、ノードが取得されます。
フレームワークのXmlDocumentクラスを使用してこれを試しました。
最終的には、Html Agility Pack(XmlDocumentと同じXPathクラスを使用)を使用したいのですが、これを使用すると、クエリ文字列に関係なく結果が得られません。
クエリ文字列が正しいことはわかっているので、パーサーに障害があると推測されます。しかし、どういうわけか、Microsoftが壊れたXPathパーサーを出荷するのではないかと思います。
助言がありますか?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de">
<head>
<title>Some title</title>
</head>
<body>
<div>
<div class="page">
<div id="dp-page" class="round-all">
<div class="dpbox">
<div id="posts">
Here we go!
</div>
</div>
</div>
</div>
</div>
</body>
</html>
別の手がかりを見つけました。ノード<a name="poststop" id="poststop"></a>
がxmlに存在する場合、クエリは失敗します。それ以外の場合は成功します。しかし、なぜ?