C#htmlagilitypack node.xpath
我正在用C#和htmlagilitypack制作一个webscraper应用程序,现在我想用下拉菜单来选择文档中的一个元素。我想看到xpath的字符串,这是我希望得到的结果 //a[@href=”http://www.google.com“] 但是我得到的xpath是 /html[1]/body[1]/div[1]/a[1] 有什么方法可以恢复更可读的xpath吗? 我使用的代码是:C#htmlagilitypack node.xpath,c#,html,xpath,html-agility-pack,C#,Html,Xpath,Html Agility Pack,我正在用C#和htmlagilitypack制作一个webscraper应用程序,现在我想用下拉菜单来选择文档中的一个元素。我想看到xpath的字符串,这是我希望得到的结果 //a[@href=”http://www.google.com“] 但是我得到的xpath是 /html[1]/body[1]/div[1]/a[1] 有什么方法可以恢复更可读的xpath吗? 我使用的代码是: HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(data
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(data);
List<string> nodes = new List<string>();
foreach (HtmlNode n in doc.DocumentNode.Descendants()){
nodes.Add(n.XPath);
}
List<string> ComboItems = nodes.Distinct().ToList();
_comboFilterNode.ItemsSource = ComboItems;
HtmlDocument doc=新的HtmlDocument();
doc.LoadHtml(数据);
列表节点=新列表();
foreach(doc.DocumentNode.subjects()中的HtmlNode n){
Add(n.XPath);
}
List ComboItems=nodes.Distinct().ToList();
_comboFilterNode.ItemsSource=ComboItems;
它不必是我给出的第一个示例的格式,但我确实需要一些东西,这样您就不需要阅读整个HTML文件来了解它是什么元素
或者一种获得:
<a href="http://www.google.com/"/>
它并不总是一个
,我也不想要innerHTML
提前感谢您的帮助:D您可以使用
HtmlNode
名称和属性集合的组合为给定的HtmlNode
构建HTML标记,排除其内容
例如,假设变量foo
引用了HtmlNode
实例,可以执行以下操作:
HtmlNode foo;
var attributes = string.Join(" ",
foo.Attributes
.Select(o => String.Format("{0}=\"{1}\"", o.Name, o.Value))
);
//combine element name and the attributes collection to create a representative HTML markup
var result = String.Format("<{0} {1}/>", foo.Name, attributes);
我现在有:
foreach (HtmlNode n in doc.DocumentNode.Descendants())
{
if (n.Attributes.Count != 0)
{
nodes.Add("//"+n.Name + "[@" + n.Attributes[0].Name+"='"+n.Attributes[0].Value+"']");
}
else
{
nodes.Add(n.Name);
}
}
List<string> ComboItems = nodes.Distinct().ToList();
_comboFilterNode.ItemsSource = ComboItems;
foreach(doc.DocumentNode.subjects()中的HtmlNode n)
{
如果(n.Attributes.Count!=0)
{
节点。添加(“//”+n.Name+“[@”+n.Attributes[0]。Name+“=”“+n.Attributes[0]。Value+“]”);
}
其他的
{
nodes.Add(n.Name);
}
}
List ComboItems=nodes.Distinct().ToList();
_comboFilterNode.ItemsSource=ComboItems;
遗憾的是,我现在只有一个属性可以过滤它,但它可以满足需要,并在XPath中返回。“…我不想要innerHTML”,innerHTML的问题是什么?(我会这样做,而不是试图获取给定元素的不同XPath,这将使构建更加复杂)如果我得到innerHTML,我也会得到所有子元素,我不希望这样
<a href="http://www.google.com/"/>
foreach (HtmlNode n in doc.DocumentNode.Descendants())
{
if (n.Attributes.Count != 0)
{
nodes.Add("//"+n.Name + "[@" + n.Attributes[0].Name+"='"+n.Attributes[0].Value+"']");
}
else
{
nodes.Add(n.Name);
}
}
List<string> ComboItems = nodes.Distinct().ToList();
_comboFilterNode.ItemsSource = ComboItems;