¿Html Agility Pack SelectSingleNode dando siempre el mismo resultado en la iteración?

c# html html-agility-pack selectsinglenode

Pregunta

Me gustaría los nodos de la colección, pero con SelectSingleNode iterativo, sigo obteniendo el mismo objeto solo nodo. Lo que estoy cambiando ... Lo que intento es leer la respuesta web de un sitio determinado y obtener información como valores, enlaces ... en Elementos especiales definidos.

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"));               
}

Esto es por ejemplo para 1 iteración:

<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>

Respuesta aceptada

Por escrito

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

es como si estuvieras escribiendo

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

Para hacer lo que quieres hacer, debes escribirlo así: node.SelectSingleNode(".//span[@itemprop='name']").InnerText .

Esta . punto / período le indica que realice una búsqueda en el nodo actual, que es un node lugar de doc




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué