0

我有 js 函数,它试图设置 XMLDoc 对象并设置全局参数之一(modelingDiagram)。

在尝试按标签名称获取元素时,它总是返回空列表(但不是在 Firefox 中)。在调试期间,我知道它正在为我在观察区域尝试的任何标签返回空列表 - xmlDoc.getElementsByTagName('Processes'); 或 xmlDoc.getElementsByTagName("desc");

下面是js函数。注释区域表明我在哪里得到了异常。

function setXmlDoc(text)
{
if (window.ActiveXObject){
              var doc=new ActiveXObject('Microsoft.XMLDOM');
              doc.async='false';
              doc.loadXML(text);
} else {
              var parser=new DOMParser();
              var doc=parser.parseFromString(text,'text/xml');
}

xmlDoc = doc;
modelingDiagram = xmlDoc.getElementsByTagName('Processes')[0].getElementsByTagName('ModelingDiagram');
//Uncaught TypeError: Cannot call method 'getElementsByTagName' of undefined
}

文本变量包含字符串格式的 xml -

<?xml version="1.0" encoding="utf-8"?>
<Processes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="">
  <Process>
    <desc value="Z45 Accounting">Z45 Accounting</desc>
    <height value="541">541</height>
    <width value="411">411</width>
    <xval value="50">50</xval>
    <yval value="50">50</yval>
    <Flowelements>
   ....
   ....
   ....

我无法弄清楚 Chrome 希望在这里获得正确的列表是什么?

4

2 回答 2

0

根据 W3C DOM 3 核心规范 getElementByTagName() 返回 NodeList 以使“核心”规范独立于“html”规范,Gecko/Firefox 当前返回一个 NodeList(错误 162927),但从 Gecko/Firefox 19 开始,它将返回HTMLCollection(错误 799464)。

但是 DOM4 草案说 getElementByTagName() 应该返回 HTMLCollection。

Internet Explorer、WebKit 和 Opera 当前返回 HTMLCollection。尝试使用 namedItem 方法,这将使它类似于 HTMLCollection。

于 2012-12-05T06:37:44.997 回答
0

在深入研究了这个问题之后,我才知道这个 xml 字符串在第 0 个索引处有一些特殊的字符(看不见)。我在执行 alert(text.charAt(0)) 时期待“<”,但它在弹出窗口中没有显示任何字符。这让我意识到 stmt xmlDoc.loadXML(text) 总是返回 false 。

text = text.substr(1, text.length);

解决了这个问题。

于 2012-12-05T14:48:17.327 回答