Подсчитайте количество узлов в фрагменте XML, используя Javascript / E4X - PullRequest
6 голосов
/ 22 июля 2009

Рассмотрим эту проблему:

Используя Javascript / E4X, в сценарии использования без браузера (механизм интеграции Javascript HL7) существует переменная, содержащая фрагмент XML, который может иметь несколько повторяющихся узлов.

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

Вопрос : Как узнать количество узлов домашних животных в Javascript / E4X?

РЕДАКТИРОВАТЬ: Чтобы уточнить, этот вопрос должен быть около E4X (ECMAScript для XML) . Извиняюсь тем, кто ответил без этой информации. Я должен был изучить и опубликовать эту информацию заранее.

Ответы [ 3 ]

5 голосов
/ 22 июля 2009

Используйте объект E4X XML для создания XMLList ваших «домашних» узлов. Затем вы можете вызвать метод длины в XMLList.

//<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();
3 голосов
/ 22 июля 2009

Используя 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 );  
3 голосов
/ 22 июля 2009

Я бы сказал ... используйте 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")
         //  };
      }
...