这是一些c#代码
string webPageStr = @"<html><body><div id=""content"">good content</div><div id=""badcontent"">bad content</div></body></html>";
XmlDocument webPage = new XmlDocument();
webPage.LoadXml(webPageStr);
XmlElement divElement = webPage.GetElementById("content");
和divElement等于null,我不知道为什么
我也尝试过像这样声明webPageStr
string webPage = @"<html><body><div id="content">good content</div><div id="badcontent">bad content</div></body></html>";
但XmlDocument抛出异常System.Xml.XmlException:“&amp;”坏标记
这段代码有什么问题?
答案 0 :(得分:3)
如果要使用GetElementById方法,则需要包含DOCTYPE声明。这是因为该函数不知道ID对于给定的XML意味着什么。在您的情况下,您正在使用XHTML,因此您需要指定当您想要通过id查找元素时,这意味着找到具有名为“id”的属性的节点:
string webPageStr = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd""><html><body><div id=""content"">good content</div><div id=""badcontent"">bad content</div></body></html>";
XmlDocument webPage = new XmlDocument();
webPage.LoadXml(webPageStr);
XmlElement divElement = webPage.GetElementById("content");
第一种方法意味着您在运行代码时需要对DOCTYPE声明进行Web访问(http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd)
另一种方法是使用XPATH表达式:
string webPageStr = @"<html><body><div id=""content"">good content</div><div id=""badcontent"">bad content</div></body></html>";
XmlDocument webPage = new XmlDocument();
webPage.LoadXml(webPageStr);
XmlNode divElement = webPage.SelectSingleNode("//div[@id=\"content\"]");