【问题标题】:Extract all divs containing specific keywords using XPath/HTML Agility Pack使用 XPath/HTML Agility Pack 提取所有包含特定关键字的 div
【发布时间】:2012-05-04 01:40:48
【问题描述】:

我尝试使用 HTML Agility Pack 从 html(-->xml) 文档(如下)中提取数据。包含“id=dealId_*****”的“div”是相关的。我想我知道如何继续,当我弄清楚如何用“id=dealId_*****”计算所有“div”时。我尝试使用 XPath 方法“starts-with”,但没有成功:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(Sourcecode);

int numberOfDIVs;
numberOfDIVs = doc.DocumentNode.SelectNodes("//*[@id='jLocalDeals']/*[starts-with(@id, 'dealId_']").Count;

    <div id="jLocalDeals" class="dealsBlock" style="">
    <h1>
    <div id="dealId_5474417" class="jDeal LEISURE_OFFERS">
    <div id="dealId_5476688" class="jDeal SHOPPING">
    <div id="dealId_5445019" class="jDeal TICKETS1 RESTAURANT1">
    <div class="wrapper3Deals"></div>
    <div id="dealId_5474286" class="jDeal BEAUTY">
    <div id="dealId_5476685" class="jDeal LEISURE_OFFERS">
    <div id="dealId_5474466" class="jDeal SERVICES">
    <div class="wrapper3Deals"></div>
    <div id="dealId_5466810" class="jDeal BEAUTY">
    <div id="dealId_5425417" class="jDeal SERVICES">
    <div id="dealId_5474329" class="jDeal SHOPPING">
    <div class="wrapper3Deals"></div>
    <div id="dealId_5476703" class="jDeal SHOPPING">
    <div id="dealId_5476729" class="jDeal SHOPPING">
    <div id="dealId_5474702" class="jDeal HEALTHCARE">
    <div class="wrapper3Deals"></div>
    <div id="dealId_5444044" class="jDeal TRAVEL1" style="display: block;">
    <div id="dealId_5474444" class="jDeal LEISURE_OFFERS" style="display: block;">
    <div id="dealId_5473774" class="jDeal TRAVEL1" style="display: block;">
    <div class="wrapper3Deals"></div>
    </div>  

P.S.:不幸的是,我只能使用 .NET 2.0。

【问题讨论】:

    标签: c# html xml dom xpath


    【解决方案1】:

    使用 contains() 函数:

    //div[@id='jLocalDeals']//div[contains(@id,'dealId')]
    

    如果你想要一个快捷方式,你可以使用 xpath 中的 count() 函数:

    count(//div[@id='jLocalDeals']//div[contains(@id,'dealId')])
    

    另外,starts-with 在您的 xpath 中不起作用的原因是因为您正在检查 //div[@id='jLocalDeals'] 的孩子的 ID,而不是 &lt;h1&gt; 的孩子的 ID,这是 &lt;div id="dealId_****"/&gt; 所在的位置。使用开头:

    //div[@id='jLocalDeals']//div[starts-with(@id,'dealId')]
    

    或者

    //div[@id='jLocalDeals']/*/*[starts-with(@id,'dealId')]
    

    希望这会有所帮助,如果我需要澄清任何事情,请告诉我...

    【讨论】:

    • 谢谢,但这也不起作用(NullReferenceException):(这是网页,我正在尝试抓取:groupon.de/alle-deals/aachen。在路径中 >use count() 是什么意思?
    • XPath 函数 count() 返回节点数。与使用 HtmlDocument.Count() 没有什么不同,只是指出来让你知道。当你简单地运行 //div[@id='jLocalDeals'] 时,你有什么回报吗?
    • 通过简单地运行 //div[@id='jLocalDeals'] 我得到 NumberofDIVs=1 And this。我希望你能帮助我。
    • 抱歉无法查看 imgbox,我所在的地方被屏蔽了。你能把它加载到 imgur 上吗?
    • 好吧,我真的看不出来,但我确实看到它只找到 4 个节点,但您的原始帖子至少有 15 个。我在上面发布的 XPath 适用于您拥有的 xml在您的原始帖子中,因此请在问题中发布所有参考信息,我会再看一些,但如果上述方法不起作用,我认为它不是 xpath。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2011-11-19
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多