HtmlAgilityPackはWindows Phone 8.1プラットフォーム用のLinqを使用しています


質問

HtmlAgilityPackはまだWindows Phone 8.1ではサポートされていないため、プロジェクトで手動で参照することはトリックの解決策でした。しかしこれだけの問題ではありません。私は過去のプロジェクトでXPathを使ってノードを選択することができました。これで、 HtmlDocumentNode.SelectNode()関数が(バージョンの互換性があるためHtmlDocumentNode.SelectNode()ことがわかりました。

私が過去のプロジェクトで使ったことは、これと似ていました

HtmlNode parent = document.DocumentNode.SelectSingleNode("//ul[@class='songs-list1']");
HtmlNodeCollection x = parent.ChildNodes;

私はstackoverflowとGoogleを検索し、Linqを使用してノードを選択することはまだ可能ですというアイデアを得ました。

SelectNodesSelectNodeように動作するコードのブロックを探しています。

HtmlDocument非同期的に読み込むことは高く評価されます。

受け入れられた回答

XPathを使用してLINQを使用している現在のコードを翻訳する場合は、次のようにします。

HtmlNode parent = document.DocumentNode
                          .Descendants("ul")
                          .FirstOrDefault(o => o.GetAttributeValue("class", "") 
                                                   == "songs-list1")
HtmlNodeCollection x = parent.ChildNodes;

あなたがWindowsの携帯電話8.1ユニバーサルアプリケーションやWindows RT用HtmlAgilityPackバージョンでXPathを受け入れる方法を見つけることが予想される場合でも(「 私はのように動作するコードのブロックを求めていSelectNodesSelectNode 、あなたがもっと良い」)ではない: HtmlAgilityPack &Windows 8 Metro Apps (HAPの著者による解答)。


人気のある回答

あなたはElement / sメソッドを使ってそれを行うことができます:

        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(htmlString);
        var h6Nodes = from h6element in doc.DocumentNode.Element("body").Element("center").Elements("h6")
                      where h6element.Attributes["class"].Value.Equals("songs-list")                      
                      select h6element;

これはあなたが

        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(htmlString);
        var h6Nodes = from h6element in doc.DocumentNode.Element("body").Element("center").Elements("h6")
                      where h6element.Attributes["class"].Value.Equals("songs-list")                      
                      select h6element;

クラス<h6> -listを持つ<h6>ノードを取得します。





ライセンスを受けた: CC-BY-SA
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ