我正在尝试制作一个基本上有两个滚动框的 html 页面,其中一个我可以查看文档中节点名称的树状视图(我将其设置为创建一个按钮而不是纯文本),然后当你单击树视图中的节点名称,它会在另一个框中显示该节点的值和属性名称。我正在使用 w3schoools 建议的标准加载方法加载文档
function openSourceXML(){
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
;
xmlhttp.open("GET",
"file:///C:/Users/conada/Downloads/FOPwc/dictionary.dic", false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
};
我可以使用...构建树视图部分没有问题
function start() {
x = xmlDoc.documentElement;
document.getElementById("root").innerHTML = xmlDoc.documentElement.nodeName;
document.write("<br><b><font color=\"rgb(33,0,255)\" size=\"6\">"
+ x.nodeName + "</b></font>");
printChildren(x, 1);
function printChildren(node, depth) {
for ( var i = 0; i < node.childNodes.length; ++i) {
if (node.childNodes[i].nodeName != "#text") {
document.write("<br>");
if (depth == 1)
document.write("<b><font color=\"0000FF\" size=\"5\">");
if (depth == 2)
document.write("<font color=\"0088DD\" size=\"4\">");
if (depth == 3)
document.write("<font color=\"3318BB\" size=\"4\">");
if (depth == 4)
document.write("<font color=\"006688\" size=\"4\">");
if (depth == 5)
document.write("<font color=\"00DDFF\" size=\"4\">");
for ( var j = 0; j < depth; j++) {
document
.write("  ");
}
document.write("<button type=\"button\" onClick=\"writeSome(this.value)\" value=\"" + node.childNodes[i].nodeName + "\">" + node.childNodes[i].nodeName +"</button>");
if (depth == 1)
document.write("</b></font>");
if (depth == 2)
document.write("</font>");
if (depth == 3)
document.write("</font>");
if (depth == 4)
document.write("</font>");
};
printChildren(node.childNodes[i], depth + 1);
};
};
};
当您单击该按钮时,它会调用一个函数,将所选节点的名称传递给它。然后该函数会尝试使用 getElementsByTagName 来检索所需的节点,但这就是事情陷入困境的地方。到目前为止,此函数只是简单地显示您应该获取的节点的名称,然后在尝试获取节点后输出名称(应该在逻辑上匹配)。按钮单击调用的函数是...
function writeSome(value){
currNode=value;
//output passed string to ensure there is no problem there
document.getElementById("rightPane").innerHTML = currNode + "<br>";
//try to grab the node you want
x = xmlDoc.getElementsByTagName(currNode);
//display the name of the node to ensure the right node was found (should match name passed in)
document.getElementById("rightPane").innerHTML += x.nodeName + "<br>";
};
这些功能都在我的html外部的一个文件中。为什么 getElementsByTagName 似乎什么都不做?如果不是这种方式,我如何访问给定名称的特定节点?任何帮助都会很棒,因为我已经用尽了如何解决这个问题的想法。
另外,请注意,我已经验证了一些访问 XML 文件的函数可以正常工作,例如使用 xmlDoc.documentElement 检索根节点,之后使用 .childNodes 遍历文件,但这对我来说用处不大,我只想快速干净地获取我正在寻找的特定节点。