2010-10-27 169 views

回答

1

在你的榜样,xmlobject文档对象,according to MDC。据w3schools,在IE浏览器,你需要使用IE特定ActiveX对象,而不是DOMParser

var xmlDoc, parser; 
if (window.DOMParser) { 
    parser = new DOMParser(); 
    xmlDoc = parser.parseFromString(text,"text/xml"); 
} 
else { // Internet Explorer 
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async="false"; 
    xmlDoc.loadXML(text); 
} 

你说getElementById是行不通的。请注意,id默认情况下不是XML中的特殊属性(类型为“ID”的属性),因此即使给元素赋予id属性,getElementById也不起作用(应返回null)。详情请见W3C docs for getElementById。我从来没有做过,但我认为你会通过DTD为“ID”类型分配一个属性。

但是,如果没有,您可以使用其他遍历机制。例如(live copy):

var xmlDoc, parser, text, things, index, thing; 

text = 
    '<test>' + 
    '<thing>Thing 1</thing>' + 
    '<thing>Thing 2</thing>' + 
    '</test>'; 
if (window.DOMParser) { 
    parser = new DOMParser(); 
    xmlDoc = parser.parseFromString(text,"text/xml"); 
} 
else { // Internet Explorer 
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async="false"; 
    xmlDoc.loadXML(text); 
} 
things = xmlDoc.documentElement.getElementsByTagName('thing'); 
for (index = 0; index < things.length; ++index) { 
    thing = things.item(index); 
    display(index + ": " + getText(thing)); 
} 

...其中getText是:

function getText(element) { 
    return textCollector(element, []).join(""); 
} 
function textCollector(element, collector) { 
    for (node = element.firstChild; node; node = node.nextSibling) { 
     switch (node.nodeType) { 
      case 3: // text 
      case 4: // cdata 
      collector.push(node.nodeValue); 
      break; 
      case 8: // comment 
       break; 
      case 1: // element 
      if (node.tagName == 'SCRIPT') { 
       break; 
      } 
      // FALL THROUGH TO DEFAULT 
      default: 
      // Descend 
      textCollector(node, collector); 
      break; 
     } 
    } 
    return collector; 
} 

getText就是为什么我使用图书馆像jQueryClosurePrototypeYUI,或者any of several others一个很好的例子这个东西,你会认为在一个元素中获得文本会很简单,如果元素里面只有一个文本节点,它就是 [因为我们的thing秒以上]。如果它没有,那么,it gets complicated fast。)

+0

hmmmm ....我无法调用像getElementById等等的方法...这就是为什么......猜猜是否有其他错误... – 2010-10-27 09:28:17

+0

@Arun :您可能正在寻找'xmlDoc.documentElement' - 我会做一个简单的例子。 – 2010-10-27 09:30:08

+0

@阿伦:我已经添加了一个例子。 – 2010-10-27 09:47:56