html
  • xpath
  • html-agility-pack
  • 2016-09-15 14 views -1 likes 
    -1

    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); 
    
    +0

    '// IMG/@のSRC: –

    +0

    なぜこの質問が投票されるのか不思議です。 –

    答えて

    0

    これはトリックを行います属性選択に http://htmlagilitypack.codeplex.com/discussions/1720

    をサポートしていませんHtmlの敏捷性パックのように見えます// img/@ lowsrc`これは絶対に正しいXPathであり、あなたが望むものを正確に返さなければなりません。 HTMLのAgility Packで何か問題がありますか?

    +0

    そのスレッドは9歳です。パックは、自分のコードが示す結果として属性の選択をサポートします。しかし、XPath式が同じノードの複数の属性と一致する場合、バグがあるようです –

    +0

    @AndrewCooper、prob –

    関連する問題