小编mlu*_*ker的帖子

解析html - > xml并使用Xpath查询

我想解析一个html页面来获取一些数据.首先,我使用SgmlReader将其转换为XML文档.然后,我将结果加载到XMLDocument,然后导航到XPath:

//contains html document
var loadedFile = LoadWebPage();

...

Sgml.SgmlReader sgmlReader = new Sgml.SgmlReader();
sgmlReader.DocType = "HTML";
sgmlReader.WhitespaceHandling = WhitespaceHandling.All;
sgmlReader.CaseFolding = Sgml.CaseFolding.ToLower;

sgmlReader.InputStream = new StringReader(loadedFile);

XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.XmlResolver = null;
doc.Load(sgmlReader);
Run Code Online (Sandbox Code Playgroud)

这个代码适用于大多数情况,除了在这个网站上 - www.arrow.com(尝试搜索像OP295GS这样的东西).我可以使用以下XPath获取包含结果的表:

var node = doc.SelectSingleNode(".//*[@id='results-table']");
Run Code Online (Sandbox Code Playgroud)

这给了我一个带有几个子节点的节点:

[0]         {Element, Name="thead"}  
[1]         {Element, Name="tbody"}  
[2]         {Element, Name="tbody"}  
FirstChild   {Element, Name="thead"}
Run Code Online (Sandbox Code Playgroud)

好吧,让我们尝试使用XPath获取一些子节点.但这不起作用:

var childNodes = node.SelectNodes("tbody");
//childnodes.Count = 0
Run Code Online (Sandbox Code Playgroud)

这也是:

var childNode = node.SelectSingleNode("thead");
// childNode = null
Run Code Online (Sandbox Code Playgroud)

甚至这个: …

.net c# xml html-parsing

7
推荐指数
1
解决办法
2106
查看次数

标签 统计

.net ×1

c# ×1

html-parsing ×1

xml ×1