我想解析一个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)
甚至这个: …