在JavaScript中解析XML,试图通过类名获取元素

问题描述:

我想使用JavaScript解析大型XML文件。在线看,似乎最简单的方法就是使用浏览器的DOM解析器。这工作,我可以通过ID获取元素。我还可以获得这些元素的“类”属性,并返回我所期望的。但是,我似乎没有能够按班获得元素。在JavaScript中解析XML,试图通过类名获取元素

xmlString = '<?xml version="1.0"?>'; 
xmlString = xmlString + '<example class="test" id="example">content</example>' 

parser = new DOMParser(); 
xmlDoc = parser.parseFromString(xmlString,"text/xml"); 

xmlDoc.getElementById("example");  
     // returns the example element (good) 

xmlDoc.getElementById("example").getAttribute("class"); 
     // returns "test" (good) 

xmlDoc.getElementsByClassName("test"); 
     // returns [] (bad) 

任何想法:

下在最新的Chrome被审判?

+0

哪个浏览器?也许你的浏览器不支持这个功能? – gdoron

+1

可能重复到http://stackoverflow.com/questions/9396354 – Bergi

+1

这是行不通的,因为你正在处理一个XML文档,而HTML特定的属性(如'class')不适用。但是,仍然可以通过标记名称获取元素(即'xmlDoc.getElementsByTagName('example');') - 您是否可以使用它来获得您的优势? –

您可以使用JQuery通过使用类选择器来解析XML文件。 http://jquery.com

+0

好吧,看起来这是jQuery可用的最佳方式。谢谢。 –

这应该得到给定类的所有元素,假定标记名称是一致的。

var elements = xmlDoc.getElementsByTagName('Example'); 
var classArray = []; 
for(var i=0;i<elements.length;i++){ 
    if(elements[i].className=="test"){ 
     classArray.push(elements[i]) 
}} 
+0

这几乎可行,除了.className至少在Chrome中不存在,所以你必须使用getAttribute('class')。不过,我不知道它是否比jQuery解析器快 –

将解析器类型更新为HTML而不是XML应该可行。

parser = new DOMParser(); 
xmlDoc = parser.parseFromString(xmlString,"text/html")