【问题标题】:How handle Cannot read property 'getAttribute' of undefined?如何处理无法读取未定义的属性“getAttribute”?
【发布时间】:2023-03-27 14:32:01
【问题描述】:

如何处理错误无法读取未定义的属性“getAttribute”。我正在使用DOMParser 获取xml 标记的type 属性。这个 xml 标签有时可以是FirstTag,有时也可以是SecondTag。我实现了这个在FirstTag 上工作得很好,但是当SecondTag 是在控制台中显示错误。

var parser = new DOMParser();
var content = '<root>' + content + '</root>';
xmlDoc = parser.parseFromString(content, "text/xml");

if( xmlDoc.getElementsByTagName("FirstTag")[0] == 'undefined' ){
    var element = xmlDoc.getElementsByTagName("SecondTag")[0];
    var type = element.getAttribute("type");
}else {
    var element = xmlDoc.getElementsByTagName("FirstTag")[0];
    var type = element.getAttribute("type");
}

【问题讨论】:

  • 你能把content的样本也发一下吗
  • 好吧内容并不总是相同的xml,但总是有&lt;Firstag type="something /&gt;&lt;SecondTag type="something" /&gt;
  • if 条件永远不会通过,xmlDoc.getElementsByTagName("FirstTag")[0] 永远不会是字符串。

标签: javascript xml-parsing domparser


【解决方案1】:

最好使用xmlDoc.getElementsByTagName("FirstTag").length 而不是未定义的检查

var parser = new DOMParser();
var content1 = '<root><FirstTag type="something" /></root>';
var content2 = '<root><SecondTag type="something" /></root>';

xmlDoc = parser.parseFromString(content2, "text/xml");

if( xmlDoc.getElementsByTagName("FirstTag").length == 0 ){
    var element = xmlDoc.getElementsByTagName("SecondTag")[0];
    var type = element.getAttribute("type");
}else {
    var element = xmlDoc.getElementsByTagName("FirstTag")[0];
    var type = element.getAttribute("type");
}

【讨论】: