Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 如何使用相同的xpath查询在HTML代码中搜索类名和ID名?_C# 4.0_Xpath_Html Agility Pack - Fatal编程技术网

C# 4.0 如何使用相同的xpath查询在HTML代码中搜索类名和ID名?

C# 4.0 如何使用相同的xpath查询在HTML代码中搜索类名和ID名?,c#-4.0,xpath,html-agility-pack,C# 4.0,Xpath,Html Agility Pack,我使用以下代码在HTML代码中搜索类名abc: 这给了我正确的结果 但是如果我想搜索ID名abc而不是类,上面的代码就不起作用了 可能我正在使用的代码包含@class word,因此它不适用于ID名称 有没有办法使用相同的代码搜索类名和ID名?首先,ID不同于ID。HTML不区分大小写,但XML区分大小写。看看这篇文章的作者 也就是说,当您使用其XPATH特性时,必须使用编写的标记 小写。这意味着//body表达式将匹配body,body 和body,和//body将不匹配 同样的意思是ID 关

我使用以下代码在HTML代码中搜索类名abc:

这给了我正确的结果

但是如果我想搜索ID名abc而不是类,上面的代码就不起作用了

可能我正在使用的代码包含@class word,因此它不适用于ID名称

有没有办法使用相同的代码搜索类名和ID名?

首先,ID不同于ID。HTML不区分大小写,但XML区分大小写。看看这篇文章的作者

也就是说,当您使用其XPATH特性时,必须使用编写的标记 小写。这意味着//body表达式将匹配body,body 和body,和//body将不匹配

同样的意思是ID

关于过滤器逻辑,您必须使用:

或者更简单一点:

var nodes = doc.DocumentNode.SelectNodes("//*[@class=\"abc\" and @id=\"div1\"]");
但作为个人偏好,如果上下文允许,我会使用LINQ来实现:

var nodes = doc.DocumentNode.Descendants()
    .Where(i => 
        i.Attributes["class"] != null 
        && i.Id != null 
        && i.Attributes["class"].Value == "abc" 
        && i.Id == "div1");

请给出示例XML代码和预期输出。@Ranon,我相信问题是关于HTML代码的。可能使用.XPath是在XML上的,所以如果他想使用它,哦,HTML,它必须是有效的XML,或者他必须使用某种HTML解析器将其形成有效的XML。不管怎样,他应该添加一些输入。嗨,我正在使用HtmlAgilityPack获取HTML代码部分,我正在搜索类或ID名称。我在这里没有使用任何XML代码
var nodes = doc.DocumentNode.SelectNodes("//*[@class=\"abc\" and @id=\"div1\"]");
var nodes = doc.DocumentNode.Descendants()
    .Where(i => 
        i.Attributes["class"] != null 
        && i.Id != null 
        && i.Attributes["class"].Value == "abc" 
        && i.Id == "div1");