当我添加/ text()时,为什么我的XPath会卡在第一个结果上?

时间:2016-02-08 21:40:57

标签: c# html xml xpath

这里是我试图使用我的XPath的HTML的模拟:

<div class="stream-links">
    <div>
        <a href="link">value I need</a>
    </div>
    <div>
        <a href="link">value I need</a>
    </div>
    <div>
        <a href="link">value I need</a>
    </div>
</div>

现在,当我在浏览器中使用XPath模式//div[@class='stream-links']/div/a时,它会选择<a ...>节点。每次按Enter键都会选择下一个,但是当我使用模式//div[@class='stream-links']/div/a/text()时,它会卡在第一个<a ...>节点的文本上,所以当我按下回车键时它不会移动到下一个节点。 (在FireFox btw上使用Firebug插件来检查元素)

我在C#中对程序进行编码,父div下的div数量是一个变量,所以我不能在这里使用//div[@class='stream-links']/div[数字]/a/text(),因为我需要得到所有这些。

我使用Xpath的代码是HtmlNodeCollection NODECOL1 = MEDOC.DocumentNode.SelectNodes("//div[@class='stream-links']/div/a[1]");

所以我的问题是:
1)Firebug是否有特殊原因没有跳到下一个<a...>或者它是一个“错误”。在插件的一面?
2)我的代码是否仍然有用,或者我是否需要以另一种方式处理它?<​​/ p>

我的代码中有其他一些不正确的事情,所以我无法看到我的代码中的那部分是否真的有效,如果我可以测试,就不会问问题2我自己现在。

1 个答案:

答案 0 :(得分:2)

对于HTML,此XPath选择三个a元素:

//div[@class='stream-links']/div/a

此XPath选择三个文本节点:

//div[@class='stream-links']/div/a/text()

此XPath选择一个a元素:

//div[@class='stream-links']/div/a[1]
  

我使用Xpath的代码是HtmlNodeCollection NODECOL1 =   MEDOC.DocumentNode.SelectNodes(&#34; // DIV [@class =&#39;数据流的链接&#39;] / DIV / A [1]&#34);

     

1)有没有特别的原因Firebug没有跳到下一个    或者它是一个&#39; bug&#39;在插件方面?

//div[@class='stream-links']/div/a[1]仅选择一个a元素。

  

2)我的代码是否仍然有效,或者我是否需要接近它   另一种方式?

     

我的代码中有一些不正确的东西,所以我无法看到   如果我的代码的那部分实际上有效,那么就不会问问题2   如果我现在可以自己测试一下。

鉴于你向我们展示的内容,这不是一个合理的问题。也许知道上面的XPath返回将帮助你自己回答它。