Java DOM : getElementsByTagNameNS for an element in NO namespace

标签 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"));

在调用 getElementsByTagNameNS 时使用 null 或零长度字符串 "" 将生成具有所提供的 localName 根本不在命名空间中(不包括可能位于命名空间中的具有 localName 的元素):

NodeList foo1 = doc.getElementsByTagNameNS(null, "localname");
NodeList foo2 = doc.getElementsByTagNameNS(""  , "localname");

但是,(不可链接)Javadoc for Element::getElementsByTagNameNS 相当含糊,并且没有明确提及空指针或零长度字符串可用于非命名空间元素。我可以依赖这种行为吗?

最佳答案

DOM 通常使用 null 来表示“未命名的命名空间”。这在某些方法中是明确的。但如果它不在规范中,你就不能依赖它。 (大多数编写 DOM 应用程序的人只针对一种 DOM 实现来测试它们,当他们发现它只适用于该实现时,他们可能会感到非常惊讶。)

不使用 DOM 的另一个原因 - 有更好的替代方案!

关于Java DOM : getElementsByTagNameNS for an element in NO namespace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18423266/

相关文章:

sql - 在 Sql 中从 XML 中提取数据的 SUM

javascript - 使用 javascript 创建一个新的空文档

javascript - 单击带有 DOM 内容的 Javascript 按钮触发文件下载

java - 在 Java 中实现事件生成器习惯用法

java - 在 for 循环期间添加到 ascii 代码

java - 如何在 JPanel 和 JFrame 的 contentPane 之间添加间距?

xml - 有没有办法从 XML 模式中删除魔数(Magic Number)?

javascript - 如果我在 for 语句中使用 object.getElementsByTagName(tagName)

Javascript 字符串搜索不起作用

Javafx,有没有办法检查按钮的状态并根据其状态执行 if 语句?