4

我有一些看起来像这样的 XML(有效的 XHTML):

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

而且我试图让#myHeader节点使用docment.GetElementById("myHeader"),但它总是返回null。为什么?

它不会将id属性识别为没有 DTD 或其他东西id 属性?如果是这种情况,我怎样才能让它使用 HTML DTD?

4

1 回答 1

7

这是因为 XmlDocument 对 an 的含义一无所知id。您需要在 XHTML 文档中包含一个 DTD。只需将以下内容放在 html 文件的开头:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

例子:

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");

请注意,这可能会慢一些,因为需要下载 DTD。

于 2010-09-23T06:10:23.597 回答