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 に答える