Javascript 关于xmldom对象的困惑

Javascript 关于xmldom对象的困惑,javascript,xml,dom,xmlhttprequest,Javascript,Xml,Dom,Xmlhttprequest,我正在使用下面的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(xmlDo

我正在使用下面的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>

混合成的

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

这是因为格式化xml中的格式化字符(空格、换行符等)。所有内容都被视为一个节点。任何连续的空格都将成为文本节点。您可以使用而不是childNodes。子节点将不包括文本节点

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

就像你说的那样工作,但我很好奇为什么这不起作用?xmlDoc.getElementsByTagName(“设计模式”)[0]。children[0]。nodeValue@Shijima为此,您应该执行
xmlDoc.getElementsByTagName(“设计模式”)[0].firstChild.nodeValue
或UseUnderstand,我没有意识到“Composite”被认为是它自己的节点,并认为它是它的一部分,因此我可以使用nodeValue访问文本。感谢您的帮助!