2

这是一些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=&quot;content&quot;>good content</div><div id=&quot;badcontent&quot;>bad content</div></body></html>";

但 XmlDocument 抛出异常 System.Xml.XmlException: "&" bad token

这段代码有什么问题?

4

1 回答 1

3

如果要使用GetElementById方法,则需要包含 DOCTYPE 声明。这是因为该函数不知道给定 XML 的 ID 意味着什么。在您的情况下,您使用的是 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\"]");
于 2009-03-07T12:36:38.553 回答