Html Agility PackでXPathクエリを使用して、クエリが単一要素の複数の値と一致する属性値を取得する際に問題があります。単一の要素から複数の属性値を選択する
私は、次のテストコードを持っている:
string html = @"
<html>
<body>
<img height='5' src='http://bar1.com/foo.png' lowsrc='http://bar2.com/foo.png' />
<img src='http://bar3.com/foo.png' />
</body>
</html>";
string xPathQuery = "//img/@src | //img/@lowsrc";
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
IEnumerable<string> values = htmlDoc.CreateNavigator()
.Select(xPathQuery)
.OfType<HtmlNodeNavigator>()
.Select(x => x.Value);
は、私は結果があることを期待:
http://bar1.com/foo.png
http://bar2.com/foo.png
http://bar3.com/foo.png
しかし、私が手:
http://bar1.com/foo.png
http://bar3.com/foo.png
注、第二の属性を最初のimg要素がありません。
単一のXPathクエリを使用してこれを実現する方法はありますか? XPathを使用してすべてのimg
要素を見つけて属性を直接読み取ることができますが、すべての値を返すXPathクエリがより便利になります。 |
string xPathQuery = "//img[@src or @lowsrc]";
var values = htmlDoc.DocumentNode.SelectNodes(xPathQuery)
.SelectMany(n => new[] {n.Attributes["src"], n.Attributes["lowsrc"]})
.Where(n => n != null)
.Select(a => a.Value);
'// IMG/@のSRC: –
なぜこの質問が投票されるのか不思議です。 –