【问题标题】:Confused about XML DOM object对 XML DOM 对象感到困惑
【发布时间】:2014-01-03 04:27:27
【问题描述】:

我正在使用以下 JavaScript 尝试从 xml 文档中获取节点名称。

if (window.XMLHttpRequest) {
    xhttp = new XMLHttpRequest();
} else {
    xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET", "doc.xml", false);
xhttp.send();
xmlDoc = xhttp.responseXML;
alert(xmlDoc.getElementsByTagName("DesignPatterns")[0].childNodes[0].nodeName);
}

XML 文档...

<DesignPatterns>
     <Composite>Composite</Composite>
</DesignPatterns>

警报正在输出“#text”。我希望它输出“复合”。为什么会发生这种情况,是否有一些我没有看到的不可见且神奇的#text 节点?我假设它是我在调试中看到的 /n 但这对我来说毫无意义:(

【问题讨论】:

    标签: javascript xml dom xmlhttprequest


    【解决方案1】:

    这是因为格式化 xml 中的格式化字符(空格、换行符等)。一切都被视为一个节点。任何连续的空白都成为一个文本节点。您可以使用 children 代替 childNodes。 children 将不包含文本节点。

    xmlDoc.getElementsByTagName("DesignPatterns")[0].children[0].nodeName
    

    【讨论】:

    • 就像你说的那样工作,但我很好奇为什么这不起作用? xmlDoc.getElementsByTagName("DesignPatterns")[0].children[0].nodeValue
    • @Shijima 为此你应该这样做xmlDoc.getElementsByTagName("DesignPatterns")[0].children[0].firstChild.nodeValue 或使用
    • 明白,我没有意识到'Composite'被认为是它自己的节点,并认为它是的一部分,所以我想我可以使用nodeValue访问文本。感谢您的帮助!
    猜你喜欢
    • 2014-11-28
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2012-07-22
    • 2013-05-13
    相关资源
    最近更新 更多