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?

Était-ce utile?

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
scroll top