XML文档的getElementById,Mozilla扩展

时间:2010-09-08 11:49:51

标签: javascript xml firefox-addon xpcom xml-parsing

使用Mozilla中的DOMParser方法从XML字符串解析DOM是否支持document.getElementById方法? 我正在制作一个Mozilla扩展,它读取XML文件并使用DOM Parser将XML转换为DOM元素并尝试按Id获取元素。方法getElementsByTagName有效,但不是getElementById。它总是返回null。

function (xmlString) {
    var parser = new DOMParser();
    var doc = parser.parseFromString(xmlString, "text/xml"); 
    var aNodes = doc.getElementsByTagName("nodeTag");
    for(var i=0; i<aNodes.length; ++i) {
        var id = aNodes[i].getAttribute('id');
        var resultNode = doc.getElementById(id);
        alert(id);
        alert(resultNode);
    }
}

我尝试了上面的代码。 alert(id)返回正确的id,而alert(resultNode)每次都返回null。

2 个答案:

答案 0 :(得分:8)

不,document.getElementById通常不会处理任意XML文档。

在最近的浏览器中(例如Firefox 3.5及更高版本),您可以改为使用document.querySelector

var resultNode = doc.querySelector("[id=" + id + "]");

答案 1 :(得分:2)

如果您想要一个实际上使getElementById()方法可用的解决方案(您应该使用它,它更快,更通用)并且您可以访问DTD,请添加以下行:

<!ATTLIST client id ID #IMPLIED >

如果您还没有使用DTD,只需在<?xml version= \"1.0\"?>语句后直接将其添加到xml文档中:

<!DOCTYPE clients [ 
   <!ATTLIST client id ID #IMPLIED > 
]>

在此示例中,“clients”是我的xml文件的根目录,“client”是我想要将id附加到的元素。您可以为要添加id的其他元素添加多个“ATTLIST”语句到其他类型的元素。

我在safari,chrome和firefox中对此进行了测试。效果很好。