10

HTMLアジリティパックとこのxpathを使用して、HTMLドキュメントから特定の画像を取得しようとしています:

//div[@id='topslot']/a/img/@src

私が見る限り、それは src-attribute を見つけますが、img-tag を返します。何故ですか?

InnerHtml/InnerText または何かが設定されていることを期待しますが、どちらも空の文字列です。OuterHtml は完全な img タグに設定されます。

Html Agility Pack のドキュメントはありますか?

4

7 に答える 7

15

代わりにを使用すると、属性を直接取得できますHtmlNavigator

//Load document from some html string
HtmlDocument hdoc = new HtmlDocument();
hdoc.LoadHtml(htmlContent);

//Load navigator for current document
HtmlNodeNavigator navigator = (HtmlNodeNavigator)hdoc.CreateNavigator();

//Get value from given xpath
string xpath = "//div[@id='topslot']/a/img/@src";
string val = navigator.SelectSingleNode(xpath).Value;
于 2013-03-14T17:03:48.437 に答える
12

HtmlAgilityPackは属性選択をサポートしていません。

于 2009-02-23T00:30:58.880 に答える
1

Html Agility Pack はすぐにサポートする予定です。

http://htmlagilitypack.codeplex.com/Thread/View.aspx?ThreadId=204342

于 2010-06-26T17:31:32.313 に答える
1

Html Agility Pack を使用した属性の読み取りと書き込み

HtmlAgilityPack で属性の読み取りと設定の両方を行うことができます。この例では、< html> タグを選択し、存在する場合は 'lang' (言語) 属性を選択してから、'lang' 属性の読み取りと書き込みを行います。

以下の例の doc.LoadHtml(this.All) では、"this.All" は html ドキュメントの文字列表現です。

読み書き:

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(this.All);
            string language = string.Empty;
            var nodes = doc.DocumentNode.SelectNodes("//html");
            for (int i = 0; i < nodes.Count; i++)
            {
                if (nodes[i] != null && nodes[i].Attributes.Count > 0 && nodes[i].Attributes.Contains("lang"))
                {
                    language = nodes[i].Attributes["lang"].Value; //Get attribute
                    nodes[i].Attributes["lang"].Value = "en-US"; //Set attribute
                }
            }

読み取り専用:

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(this.All);
            string language = string.Empty;
            var nodes = doc.DocumentNode.SelectNodes("//html");
            foreach (HtmlNode a in nodes)
            {
                if (a != null && a.Attributes.Count > 0 && a.Attributes.Contains("lang"))
                {
                    language = a.Attributes["lang"].Value;
                }
            }
于 2015-12-25T14:01:32.843 に答える
0

次の方法を使用して、画像の属性を取得しました。

var MainImageString  = MainImageNode.Attributes.Where(i=> i.Name=="src").FirstOrDefault();

属性名を指定してその値を取得できます。アトリビュート名がわからない場合は、ノードを取得した後にブレークポイントを指定し、その上にカーソルを置いてそのアトリビュートを表示します。

私が助けてくれることを願っています。

于 2016-09-06T10:02:43.667 に答える