Warum XmlDocument.GetElementById immer null zurück?
-
04-10-2019 - |
Frage
Ich habe einige XML bekommt (gültiges XHTML), die wie folgt aussieht:
<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>
Und ich versuche, die #myHeader
Knoten mit docment.GetElementById("myHeader")
zu bekommen, aber es gibt immer null
. Warum?
Ich bin Erraten es erkennt nicht das id
Attribut als die id-Attribut ohne DTD oder so etwas? Wenn das der Fall ist, wie kann ich es verwenden, um ein HTML-DTD?
Lösung
Es ist, weil XmlDocument weiß nichts über das, was ein id
Mittel. Sie müssen eine DTD in Ihrem XHTML-Dokument enthalten. Legen Sie einfach die folgende am Anfang Ihrer HTML-Datei:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Beispiel:
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");
Beachten Sie, dass dies ein wenig langsamer sein, weil die DTD heruntergeladen werden muss.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow