【问题标题】:How to join two HtmlNodeCollections如何加入两个 HtmlNodeCollections
【发布时间】:2015-09-12 16:54:58
【问题描述】:

我在 C# 中使用 HTML Agility Pack,我有两个 HtmlNodeCollection。我可以同时加入吗?或者有其他方法可以同时加入HtmlNodeCollection吗?

一个:

HtmlNodeCollection butiks = doc.DocumentNode.SelectNodes("//div[contains(@class,'butik-large-image')]");

两个:

HtmlNodeCollection butiks = doc.DocumentNode.SelectNodes("//div[contains(@class,'butik small left')]");

【问题讨论】:

    标签: c# xpath html-agility-pack


    【解决方案1】:

    HtmlNodeCollection 继承 IList&lt;HtmlNode&gt; 继承 IEnumerable&lt;HtmlNode&gt; ,您可以在其上调用 Enumerable.Concat() extension method 以创建包含两个源的新枚举。见How to concatenate two IEnumerable<T> into a new IEnumerable<T>?

    你也可以通过using an "or" in your Xpath expression选择两组节点:

    //div[contains(@class,'butik-large-image') or contains(@class,'butik small left')]
    

    请注意,contains() 期望按给定顺序给定类。如果您不想这样,请使用括号和and

    //div[contains(@class,'butik-large-image') 
    or 
    ( 
        contains(@class,'left') and
        contains(@class,'small') and
        contains(@class,'butik')
    )]
    

    请参阅 How can I select an element with multiple classes with Xpath? 以了解该 and 的正确实现,因为上面的代码将匹配误报,因为它不会将类作为单独的单词进行检查。

    【讨论】:

    • 如果我的类属性必须类链接这个class='butik large'我可以这样用吗?
    • @AHIR,查看 or- 和 and- 条件,只需添加您需要的。这是一个简单的布尔表达式,可以随意变宽或变窄。
    猜你喜欢
    • 1970-01-01
    • 2012-11-09
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2019-01-20
    • 2012-04-26
    相关资源
    最近更新 更多