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オブジェクトであり、そのノードですべてのchildNodeを取得できることに注意してください。これを実行して、各「要素」ノードを処理し、それが「属性」ノードであるかどうかを判別できます。

詳細については、 http://www.w3schools.com/jsref/dom_obj_node.aspを参照してください。

于 2013-03-11T01:40:58.567 に答える