奇怪的行为XmlDocument.LoadXML和GetElementByID,如何用引号声明字符串

时间:2009-03-07 12:28:06

标签: .net xml quotations

这是一些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:“&amp;”坏标记

这段代码有什么问题?

1 个答案:

答案 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\"]");