为什么 XmlDocument.GetElementById 始终返回 null?

发布于 2024-09-24 17:54:14 字数 744 浏览 1 评论 0原文

我有一些 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>

我正在尝试使用 docment.GetElementById("myHeader") 获取 #myHeader 节点,但是它总是返回null。为什么?

猜测它不会将id属性识别为没有DTD或其他内容的id属性?如果是这样,我怎样才能让它使用 HTML DTD?

I've got some XML (valid XHTML) that looks like this:

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

And I'm trying to get the #myHeader node using docment.GetElementById("myHeader") but it always returns null. Why?

I'm guessing it doesn't recognize the id attribute as the id attribute without a DTD or something? If that's the case, how can I get it to use an HTML DTD?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

且行且努力 2024-10-01 17:54:14

这是因为 XmlDocument 对 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。

It's because XmlDocument knows nothing about what an id means. You need to include a DTD in your XHTML document. Just put the following in the beginning of your html file:

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

Example:

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

Notice that this might be a little slower because the DTD needs to be downloaded.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文