Pourquoi XmlDocument.GetElementById retourne toujours null?
-
04-10-2019 - |
Question
J'ai quelques XML (XHTML valide) qui ressemble à ceci:
<html>
<head>
<script type="text/javascript">
<![CDATA[
function change_header(){
document.getElementById("myHeader").innerHTML="Nice day!";
}]]>
</script>
</head>
<body>
<h1 id="myHeader">Hello World!</h1>
<button onclick="change_header()">Change text</button>
</body>
</html>
Je suis en train de faire le nœud en utilisant #myHeader
docment.GetElementById("myHeader")
mais il retourne toujours null
. Pourquoi?
Je suis devinettes il ne reconnaît pas l'attribut id
comme la attribut id sans DTD ou quelque chose? Si tel est le cas, comment puis-je obtenir d'utiliser une DTD HTML?
La solution
Il est parce que XmlDocument ne sait rien sur ce que un moyen de id
. Vous devez inclure une DTD dans votre document XHTML. Il suffit de mettre ce qui suit au début de votre fichier html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Exemple:
string html = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd""><html><body><div id=""foo"">some content</div></body></html>";
XmlDocument document = new XmlDocument();
document.LoadXml(html);
XmlElement div = document.GetElementById("foo");
Notez que cela pourrait être un peu plus lent, car la DTD doit être téléchargé.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow