【问题】
折腾:
过程中,对于内容为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml" xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" >
<head>
...
</head>
<body>
...
<div class="gig-wrapper " data-gig_id="103857" id="gig_id-103857">
...
</div>
</body>
</html>的html,转换为xml后,调用对应的SelectNodes或SelectSingleNode去查找gig-wrapper:
XmlNodeList gigDataList = xmlDoc.SelectNodes("//div[@data-gig_id]");结果却找不到。
【解决过程】
1.后来参考了:
System.Xml.XmlDocument.SelectNodes() 查询不到节点问题?
使用写成:
XmlDocument xmlDoc = htmlToXmlDoc(searchResultHtml);
XmlNamespaceManager m = new XmlNamespaceManager(xmlDoc.NameTable);
m.AddNamespace("w3org", "http://www.w3.org/1999/xhtml");
//XmlNodeList nodes00 = xmlDoc.SelectNodes("//w3org:div", m);
//XmlNodeList nodes01 = xmlDoc.SelectNodes("//w3org:div[@class]", m);
//XmlNodeList nodes02 = xmlDoc.SelectNodes("//w3org:div[@class='gig-inner']", m);
//XmlNodeList nodes03 = xmlDoc.SelectNodes("//w3org:div[@class='gig-image gig-index constrained']", m);
XmlNodeList gigDataList = xmlDoc.SelectNodes("//w3org:div[@data-gig_id]", m);就可以了。
2.后来也看到官网的解释了:
XmlNode.SelectNodes Method (String, XmlNamespaceManager)
【总结】
对于本身html带xmlns的,转换为xml后,使用SelectNodes或SelectSingleNode去查找其下节点,需要添加对应的XmlNamespaceManager参数,才可以的。
转载请注明:在路上 » 【已解决】C#中对于XmlNode,去用SelectNodes或SelectSingleNode查找,结果找不到(子节点)