我有js函数,它试图设置XMLDoc对象并设置一个全局参数(modelingDiagram)。
在尝试按标记名称获取元素时,它总是返回空列表(但不是在firefox中)。 在调试过程中,我发现它正在为我在监视区域尝试的任何标记返回空列表 - xmlDoc.getElementsByTagName( '进程');或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
}
text变量包含字符串格式的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在这里有什么期望获得正确的列表?
答案 0 :(得分:0)
根据W3C DOM 3核心规范,getElementByTagName()返回NodeList以使“核心”规范独立于“html”规范,Gecko / Firefox目前返回NodeList(错误162927),但从Gecko / Firefox 19开始,它将返回HTMLCollection(错误799464)。
但是DOM4草案说getElementByTagName()应该返回HTMLCollection。
Internet Explorer,WebKit&amp; Opera目前返回HTMLCollection。 尝试使用namedItem方法,这将使其类似于HTMLCollection。
答案 1 :(得分:0)
深入研究问题之后,我开始知道这个xml字符串在第0个索引处有一些特殊的字符(看不见)。我期待'&lt;'在执行警报(text.charAt(0))但它在弹出窗口中没有显示任何字符。这让我意识到stmt xmlDoc.loadXML(text)总是返回false。
text = text.substr(1, text.length);
解决了这个问题。