2009-07-21 21 views
6

Hãy xem xét vấn đề này:Đếm số nút trong một đoạn XML sử dụng Javascript/E4X

Sử dụng Javascript/E4X, trong một kịch bản sử dụng phi trình duyệt (một động cơ tích hợp Javascript HL7), có một biến giữ một Đoạn mã XML có thể có nhiều nút lặp lại.

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

Câu hỏi: Làm thế nào để có được đếm số nút con vật cưng trong Javascript/E4X?

EDIT: Để làm rõ, câu hỏi này nên ở khoảng E4X (ECMAScript for XML). Xin lỗi những người trả lời mà không có thông tin này. Tôi nên nghiên cứu & đăng thông tin này trước.

+0

Bạn ít nhất có quyền truy cập vào API DOM không? –

Trả lời

5

Sử dụng đối tượng XML E4X để tạo danh sách XML của các nút 'thú cưng' của bạn. Sau đó bạn có thể gọi phương thức chiều dài trên 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(); 
+0

Bạn không thể chỉ làm: petsXML.pet.length(); –

+0

Tuyệt đối, và trên thực tế tôi thường làm như vậy! Tôi chỉ muốn chia nhỏ mọi thứ để làm rõ rằng .pet (hoặc ['pet']) trả về và đối tượng XMLList, và độ dài đó() là một lời gọi phương thức trên kiểu đó. – csj

3

Tôi muốn nói ... sử dụng 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"); 
     }; 
    }); 

EDIT:. Không thể sử dụng jquery ... ok, chúng ta hãy làm điều đó trong javascript thường xuyên :(

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

Đẹp. Tuy nhiên '$' không có nghĩa là cho chuỗi xml tùy ý, nó có nghĩa là cho html. Nó hoạt động một cách tình cờ trong trường hợp đặc biệt này. Đảm bảo làm việc là '$ (xmlDoc)' (tức là tài liệu DOM đại diện cho 'xmlstring'). –

+0

Câu trả lời hay! Thật không may JQuery không có sẵn cho tôi, vì JS không có trong trình duyệt hoặc có thể tham chiếu đến các thư viện bên ngoài. Câu trả lời này được một upvote anyway! –

+0

chính xác 100%. find() hoạt động trên các phần tử, không phải văn bản, mà không phải là quá rõ ràng từ tên biến của tôi. Tôi đoán tôi nên làm cho rõ ràng hơn .. gọi tốt. – womp

3

Sử dụng DOM bạn có thể gọi getElementsByTagName()

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

More thông tin:

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

Bạn sẽ cần phải lấy tài liệu XML bằng cách nào đó. XHR, ví dụ, trả về các tài liệu dưới dạng XML được phân tích cú pháp.

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); 
+1

Bạn đã lưu giờ của tôi, cảm ơn +1 –

Các vấn đề liên quan