使用Javascript / E4X计算XML片段中的节点数

时间:2009-07-21 22:38:38

标签: javascript xml e4x mirth

考虑这个问题:

在非浏览器使用场景(Javascript HL7集成引擎)中使用Javascript / E4X,有一个变量包含一个可能有多个重复节点的XML片段。

<pets>       
 <pet type="dog">Barney</pet>
 <pet type="cat">Socks</pet>
</pets>

问题:如何获取Javascript / E4X中宠物节点数的计数?

编辑:澄清一下,这个问题应该在E4X (ECMAScript for XML)左右。向没有这些信息的人回答道歉。我应该研究和研究事先发布了此信息。

3 个答案:

答案 0 :(得分:5)

使用E4X XML对象构建“宠物”节点的XMLList。然后,您可以在XMLList上调用length方法。

//<pets>
//    <pet type="dog">Barney</pet>
//    <pet type="cat">Socks</pet>
//</pets>  

// initialized to some XML resembling your example
var petsXML = new XML("");  

// build XMLList
var petList = petsXML['pet'];  

// alternative syntax
// var petList = petsXML.pet;  

// how many pet nodes are under a given pets node?
var length = petList.length();

答案 1 :(得分:3)

我会说...使用jQuery!

  var count = 0;
  $(xmlDoc).find("pet").each(function() {
          count++;

          // do stuff with attributes here if necessary.
          // var pet = $(this);
          // var myPetType = pet.attr("type");
       };
  });

编辑:不能使用jquery ...好吧,让我们在常规的javascript中做:(

      var pets= xmlDoc.getElementsByTagName("pet");
      for ( var i = 0; i < pets.length ; i++ )
      {
          count++;
         // var petObj = {
         //     pets[i].getAttribute("type")
         //  };
      }

答案 2 :(得分:3)

使用DOM,您可以调用getElementsByTagName()

alert( document.getElementsByTagName( "pet" ).length );

更多信息:

https://developer.mozilla.org/en/DOM:element.getElementsByTagName

您需要以某种方式获取XML文档。例如,XHR将文档作为已解析的XML返回。

var xhr = new XMLHttpRequest();  
xhr.open( 'GET', 'http://domain.com/pets.xml', true );  
xhr.onreadystatechange = function ( e ) {  
    if ( xhr.readyState == 4 && xhr.status == 200 )
        alert( xhr.responseXML.getElementsByTagName( "pet" ).length );
};
xhr.send( null );