XML文档的getElementById,Mozilla扩展

问题描述 投票:3回答:2

在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。

javascript xml firefox-addon xpcom xml-parsing
2个回答
8
投票

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

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

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

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中测试了这个。工作得很好。

© www.soinside.com 2019 - 2024. All rights reserved.