小编典典

Java XML DOM:id属性有何特殊之处?

java

Document该类的Javadoc 在下有以下注释getElementById

注意:除非如此定义,否则名称为“ ID”或“ id”的属性不是ID类型的

因此,我将XHTML文档读入DOM(使用Xerces 2.9.1)。

该文档中有一个普通的旧文档<p id='fribble'>

我叫getElementById("fribble"),它返回null。

我使用XPath来获取“ // * [id =’fribble’]”,一切都很好。

因此,问题是,是什么导致DocumentBuilder实际将ID属性标记为“如此定义”?


阅读 221

收藏
2020-09-21

共1个答案

小编典典

为了进行getElementById()调用,Document必须知道其节点的类型,并且目标节点必须是XML
ID类型,方法才能找到它。它通过关联的架构了解其元素的类型。如果未设置架构,或者未将id属性声明为XML
ID类型,getElementById()则将永远找不到它。

我的猜测是您的文档不知道p元素的id属性是XML
ID类型(是吗?)。您可以使用getChildNodes()和其他DOM遍历功能导航到DOM中的节点,并尝试调用Attr.isId()id属性来确定。

getElementById
javadoc:

DOM实现应使用属性Attr.isId来确定属性是否为ID类型。

注意:除非如此定义,否则名称为“ ID”或“ id”的属性不是ID类型。

如果要使用DocumentBuilderXML将XML解析为DOM,请确保setSchema(schema)在调用newDocumentBuilder()之前先调用DocumentBuilderFactory,以确保从工厂获得的生成器知道元素类型。

2020-09-21