c# - 用于从链接中选择 href 值的 xpath 表达式

标签 c# visual-studio-2012 xpath

我有这样的 HTML 代码

<a class="cat" href="/Home/txtdata0/">txtdata0</a>
<a class="cat" href="/Home/txtdata1/">txtdata1</a>
<a class="cat" href="/Home/txtdata2/">txtdata2</a>
<a class="cat" href="/Home/txtdata3/">txtdata3</a>

为了访问链接的所有文本,我使用这样的 XPATH(如在 C# 中的 Visual Studio 中)

.//a[@class=\"cat\"]

要访问链接的所有 href 值,我使用此类 XPATH(如 C# 中的 Visual Studio 中)

.//a[@class=\"cat\"]/@href

Google Chrome Xpath Helper 显示 (.//a[@class="cat"].//a[@class="cat"]/@href)两个结果都正确

txtdata0
txtdata1
txtdata2
txtdata3

/Home/txtdata0/
/Home/txtdata1/
/Home/txtdata2/
/Home/txtdata3/

带有此类 Xpath 的 Visual Studio .//a[@class=\"cat\"] 显示:

txtdata0
txtdata1
txtdata2
txtdata3

并使用这样的 Xpath .//a[@class=\"cat\"]/@href 显示:

txtdata0
txtdata1
txtdata2
txtdata3

为什么第二个输出与第一个输出相同?

程序代码

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(seturl);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
    Stream receiveStream = response.GetResponseStream();
    StreamReader readStream = null;

    if (response.CharacterSet == null)
    {
        readStream = new StreamReader(receiveStream);
    }
    else
    {
        readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
    }

    data = readStream.ReadToEnd();

    response.Close();
    readStream.Close();
}

doc.LoadHtml(data);

HtmlAgilityPack.HtmlNodeCollection bodynode = doc.DocumentNode.SelectNodes(".//a[@class=\"cat\"]");
HtmlAgilityPack.HtmlNodeCollection bodynod = doc.DocumentNode.SelectNodes(".//a[@class=\"cat\"]/@href");
MessageBox.Show(bodynode.Count.ToString());
MessageBox.Show(bodynod.Count.ToString());

for (int i = 0; i < bodynode.Count; i++)
{
    MessageBox.Show(bodynode[i].InnerText.ToString() + " - " + bodynod[i].InnerText.ToString());
}

最佳答案

如果我没记错的话,HAP属性可以这样提取

 string _tmpUrl = documentUrl.DocumentNode.SelectNodes("//a[@class='cat']")[i].Attributes["href"].Value;

关于c# - 用于从链接中选择 href 值的 xpath 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878811/

相关文章:

javascript - 如果在 Protractor js 中找到相同的类列表,则按文本选择下拉选项

c# - 按多列排序 List<string[]>

c# - POST HttpRequestMessage 为空

c# - 如何进行简单的数学运算并将结果显示在文本框中

typeScript 生成的 JavaScript 文件不包含注释并且存在格式问题

c# - 使用 Visual Studio 2012 的本地数据库

xml - XPath 1.0:列出不同的值及其出现的次数

c# - Selenium:获取所有具有相同 id 的文本

c# - 如何增加 Linq2Entities 中的超时时间?

c++ - 如何在Visual Studio中导入和使用外部库