Comportamento strano XmlDocument.LoadXML e GetElementByID, come dichiarare una stringa con virgolette

StackOverflow https://stackoverflow.com/questions/621772

  •  05-07-2019
  •  | 
  •  

Domanda

Ecco un po 'di codice 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");

e divElement è uguale a null e non so perché

Ho anche provato a dichiarare WebPageStr in questo modo

string webPage =  @"<html><body><div id=&quot;content&quot;>good content</div><div id=&quot;badcontent&quot;>bad content</div></body></html>";

ma XmlDocument genera un'eccezione System.Xml.XmlException: " & amp; " token errato

Cosa c'è che non va in questo codice?

È stato utile?

Soluzione

È necessario includere una dichiarazione DOCTYPE se si desidera utilizzare Metodo GetElementById . È perché la funzione non sa cosa significa ID per l'XML specificato. Nel tuo caso stai usando XHTML, quindi devi specificare che quando vuoi trovare un elemento con id questo significa trovare un nodo che ha un attributo chiamato " 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");

Questo primo approccio implica che è necessario l'accesso Web alla dichiarazione DOCTYPE quando si esegue il codice ( http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd )

Un approccio alternativo sarebbe usare l'espressione 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\"]");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top