質問: html.DocumentNode.SelectNodes(string.Format("//[@id='{0}']", selector.Id)); ``` しかし、このコードを実行すると、「式はノードセットに評価される必要があります」という例外がスローされます。 誰がなぜこの「 *必須* 」がノードセットに評価される*べき*か教えていただけますか?なぜノードを返さないのでしょうか(次の行はtagsWithId.Countを呼び出します)。確かに、SelectNodesメソッドによって返されるHtmlNodeCollectionには0個のノードが含まれますか? または、不正なXpath式によるエラーですか? [これをテストしているセレクタIDは、というファイルにはっきりと存在します。 Visual Studioから直接ASPXファイルをロードすることも可能です(アドインを構築しています)。これにはXMLエラーが含まれますが、代わりに出力HTMLストリームをロードする必要があります( *つまり* 、開始時にページ宣言なしファイルの、 *等* )?
回答: **`SelectNodes()`引数に問題があります:** > > ``` > //[@id='{0}'] > > ``` > (置換を実行した後に) **sybtactically合法XPath式ではありません** 。したがって問題は、XPathの表現が「ノードを返さない」ということではなく、文法的に違法であるということです。 XPath W3C仕様に従って: " `//`は`/descendant-or-self::node()/` "の略です したがって、上記は次のように拡張されます。 `/descendant-or-self::node()/[@id='{0}']` 最後のロケーションステップにはノードテストがなく、述部で始まることに注意してください。これは、XPathの構文規則に従っては不正です。 **おそらくあなたが望む** : ``` //*[@id='{0}'] ```