Html Agility Pack SelectSingleNode在迭代中总是给出相同的结果? [英] Html Agility Pack SelectSingleNode giving always same result in iteration?

查看:145
本文介绍了Html Agility Pack SelectSingleNode在迭代中总是给出相同的结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要集合中的节点,但迭代SelectSingleNode我不断获取相同的对象,只是node.Id正在改变...
我所尝试的是读出给定网站的web响应并获取一些信息如特殊定义元素中的值,链接..

  int offSet = 0; 
string address =http://www.testsite.de/ergebnisliste.html?offset=+ offSet;

HtmlWeb web = new HtmlWeb();
//web.OverrideEncoding = Encoding.UTF8;
HtmlDocument doc = web.Load(address);

HtmlNodeCollection collection = doc.DocumentNode.SelectNodes(//div[@itemtype='http://schema.org/Posting']);

foreach(集合中的HtmlNode节点){
string id = HttpUtility.HtmlDecode(node.Id);
string cpname = HttpUtility.HtmlDecode(node.SelectSingleNode(// span [@ itemprop ='name'])。InnerText);
string cptitle = HttpUtility.HtmlDecode(node.SelectSingleNode(// span [@ itemprop ='title'])。InnerText);
string cpaddress = HttpUtility.HtmlDecode(node.SelectSingleNode(// span [@ itemprop ='addressLocality'])。InnerText);
string date = HttpUtility.HtmlDecode(node.SelectSingleNode(// div [@ itemprop ='datePosted'])。InnerText);
string link =http://www.testsite.de+ HttpUtility.HtmlDecode(node.SelectSingleNode(// div [@ class ='h3 title'] // a [@href])。 GetAttributeValue(href,default));
}

例如1次迭代:

 < div id =66666itemtype =http://schema.org/Posting> 
< div>
< a>
< img />
< / a>
< / div>
< div>
< div class =h3 title>
< a href =/ test.htmltitle =测试>
< span itemprop =title>测试< / span>
< / a>
< / div>
< div>
< span itemprop =name> TestName< / span>
< / div>
< / div>
< div>
< div>
< div>
< div>
< span itemprop =地址>测试< / span>
< / div>
< span>
< a>
< span><! - - >< / span>
< span>< / span>
< / a>
< / span>
< / div>
< / div>
< div itemprop =date>
< time datetime =2013-03-01> 01.03.13< / time>
< / div>
< / div>


解决方案

通过编写



node.SelectSingleNode(// span [@ itemprop ='name'])。InnerText $ b $ p $就像你写的那样
$ b $ doc.DocumentNode.SelectSingleNode( // @ span [@ itemprop ='name'])。InnerText



要做你想做的事情,你应该写这个: node.SelectSingleNode(.// span [@ itemprop ='name'])。InnerText
$ b 这个点/周期告诉在当前节点上搜索节点而不是 doc


I would like the nodes in the collection but with iterating SelectSingleNode I keep getting the same object just node.Id is changing... What i try is to readout the webresponse of a given site and catch some information like values, links .. in special defined elements.

int offSet = 0;
string address = "http://www.testsite.de/ergebnisliste.html?offset=" + offSet;

HtmlWeb web = new HtmlWeb();
//web.OverrideEncoding = Encoding.UTF8;
HtmlDocument doc = web.Load(address);

HtmlNodeCollection collection = doc.DocumentNode.SelectNodes("//div[@itemtype='http://schema.org/Posting']");

foreach (HtmlNode node in collection) {
    string id = HttpUtility.HtmlDecode(node.Id);
    string cpname = HttpUtility.HtmlDecode(node.SelectSingleNode("//span[@itemprop='name']").InnerText);
    string cptitle = HttpUtility.HtmlDecode(node.SelectSingleNode("//span[@itemprop='title']").InnerText);
    string cpaddress = HttpUtility.HtmlDecode(node.SelectSingleNode("//span[@itemprop='addressLocality']").InnerText);
    string date = HttpUtility.HtmlDecode(node.SelectSingleNode("//div[@itemprop='datePosted']").InnerText);
    string link = "http://www.testsite.de" + HttpUtility.HtmlDecode(node.SelectSingleNode("//div[@class='h3 title']//a[@href]").GetAttributeValue("href", "default"));               
}

This is for example for 1 iteration:

<div id="66666" itemtype="http://schema.org/Posting">   
<div>
    <a>
        <img />
    </a>
</div>
<div>
    <div class="h3 title">
        <a href="/test.html"  title="Test">
            <span itemprop="title">Test</span>
        </a>
    </div>
    <div>
        <span itemprop="name">TestName</span>       
    </div>
</div>
<div>
    <div>
        <div>
            <div>
                <span itemprop="address">Test</span>
            </div>
            <span>                     
                <a>
                    <span><!-- --></span>
                    <span></span>
                </a>
            </span>         
        </div>
    </div>      
    <div itemprop="date">
        <time datetime="2013-03-01">01.03.13</time>
    </div>
</div>

解决方案

By writing

node.SelectSingleNode("//span[@itemprop='name']").InnerText

it's like you writing

doc.DocumentNode.SelectSingleNode("//span[@itemprop='name']").InnerText

To do what you want to do you should write it like this: node.SelectSingleNode(".//span[@itemprop='name']").InnerText.

This .dot / period tells make a search on the current node which is node instead on doc

这篇关于Html Agility Pack SelectSingleNode在迭代中总是给出相同的结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆