0

我尝试使用 HTML Agility Pack 从 html(-->xml) 文档(如下)中提取数据。div包含“”的“ ”id=dealId_*****是相关的。我想我知道如何继续,当我弄清楚如何div用“ ”计算所有“ id=dealId_*****”时。我尝试使用 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>  

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

4

1 回答 1

0

使用 contains() 函数:

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

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

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

此外,在您的 xpath 中,starts-with 不起作用的原因是因为您正在检查 的子项的 id //div[@id='jLocalDeals'],而不是其子项<h1>所在的<div id="dealId_****"/>位置。使用开头:

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

或者

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

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

于 2012-05-03T14:18:12.633 回答