1

猜猜这对于 javascript 大师来说是一个简单的问题,但我正在学习并且遇到了一个我无法猜测的问题。

我对使用 javascript 读取 XML 文件很感兴趣。以下是 XML 文件的示例:

<object name='obj1'>
   <attribute name='att1' value='val1'/>
   <attribute name='att2' value='val2'/>
   <attribute name='attN' value='valN'/>
   <subobject name='sub1'>
          <attribute name='satt1' value='sval1'/>
          <attribute name='satt2' value='sval2'/>
          <attribute name='sattN' value='svalN'/>
   </subobject>
   <subobject name='subn'>
          <attribute name='snatt1' value='snval1'/>
          <attribute name='snatt2' value='snval2'/>
          <attribute name='snattN' value='snvalN'/>
   </subobject>
</object>

如您所见,我有 N 个对象。每个对象都有全局属性,并且可能有 0...M 个子对象及其属性。

问题是,应用这个(我的)代码来解析ob1属性,我还得到了所有子对象属性:

if (window.XMLHttpRequest) {    
    var xmlhttp=new XMLHttpRequest();
    xmlhttp.open("GET",URL,false);  
    xmlhttp.send();

    var xmlDoc=xmlhttp.responseXML;

    var objList = xmlDoc.getElementsByTagName("object");
    var attrList = objList[0].getElementsByTagName("attribute"); // Got ALL attributes here
}

在该代码中(为简单起见,没有错误测试),我的 attrList 对象同时获取 obj1 和所有子对象属性。

如何重写代码以仅获取 att1...attN?!?!

提前致谢!

4

2 回答 2

2

在这种情况下,由于attribute您要查找的元素是该元素的直接子object元素,您可以做的一件简单的事情是手动遍历该元素的子元素object

var obj = objList[0]
var childNodes = obj.childNodes
for(var i=0; i<childNodes.length; i++){
    var child = childNodes[i];
    if(child.nodeType == 1 && child.nodeName == 'attribute'){
        do_something(child);
    }
}

有关这些和其他 DOM 方法的信息,我建议您查看MDN上的文档。

于 2013-03-11T01:38:33.547 回答
0

您遇到的问题是子对象的技术“属性”也是对象的子对象。请记住,任何元素都是 Node 对象,并且在该 Node 上您可以获得所有 childNode。您可以这样做并处理每个“元素”节点并确定它是否是“属性”节点。

有关这方面的更多信息,请参见http://www.w3schools.com/jsref/dom_obj_node.asp

于 2013-03-11T01:40:58.567 回答