Html Agility Pack、ノードからのSelectNodes

.net c# html-agility-pack

質問

これはなぜドキュメントのすべての<li>要素を選択するのですか?

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);

var travelList = new List<Page>();
var liOfTravels = doc.DocumentNode.SelectSingleNode("//div[@id='myTrips']")
                     .SelectNodes("//li");

私が望むのは、 "myTrips"というidを持つ<div>内のすべての<li>要素を取得することです。

受け入れられた回答

id "myTrips"のdivだけでselectNodesを実行すると予想しているので少し混乱しますが、別のSelectNodes( "// li")を実行すると、ドキュメントの上から別の検索を実行します。

ステートメントを1つにまとめることでこれを修正しましたが、idが "mytrips"のdivが1つしかないWebページでのみ動作します。クエリは次のようになります。

doc.DocumentNode.SelectNodes( "// div [@ id = 'myTrips'] // li");


人気のある回答

var liOfTravels = doc.DocumentNode.SelectSingleNode("//div[@id='myTrips']")
                 .SelectNodes(".//li");

2行目のドットに注意してください。基本的にこの点に関して、HTMLAgitilityPackはXPath構文に完全に依存していますが、結果は事実上同じであるため直観的ではありません。

doc.DocumentNode.SelectNodes("//li");
some_deeper_node.SelectNodes("//li");


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow