Java DOM:GetElementsByTagnames用于不包含命名空间的元素
我注意到,当与支持命名空间的Java DOM:GetElementsByTagnames用于不包含命名空间的元素,java,xml,dom,xml-namespaces,Java,Xml,Dom,Xml Namespaces,我注意到,当与支持命名空间的DocumentBuilderFactory一起使用时: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new File("sample.xml")); 在对GetElementsB
DocumentBuilderFactory
一起使用时:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("sample.xml"));
在对GetElementsByTagnames
的调用中使用null
或零长度字符串”
,将生成具有提供的localName的元素,这些元素根本不在名称空间中(不包括可能位于名称空间中的具有该localName的元素):
但是,元素::getElementsByTagNameNS的(不可链接)非常模糊,没有明确提到空指针或零长度字符串可用于无命名空间元素。我可以依赖这种行为吗?DOM通常对“未命名名称空间”使用null。这在某些方法中是明确的。但是如果它不在规范中,你就不能依赖它。(大多数编写DOM应用程序的人只针对一个DOM实现进行测试,当他们发现它只适用于该实现时,他们可能会感到非常意外。)
不使用DOM的另一个原因是有更好的选择 DOM通常对“未命名名称空间”使用null。这在某些方法中是明确的。但是如果它不在规范中,你就不能依赖它。(大多数编写DOM应用程序的人只针对一个DOM实现进行测试,当他们发现它只适用于该实现时,他们可能会感到非常意外。)
不使用DOM的另一个原因是有更好的选择 我认为这是一个灰色区域,我不会在所有DOM实现中依赖它。我认为这是一个灰色区域,我不会在所有DOM实现中依赖它。
NodeList foo1 = doc.getElementsByTagNameNS(null, "localname");
NodeList foo2 = doc.getElementsByTagNameNS("" , "localname");