java - 在 Java 中查找没有正确命名空间的节点中的元素

标签 java xml dom xml-namespaces nodelist

所以我在这里声明了一个 xml 文档:

DocumentBuilder dBuilder = dbFactory_.newDocumentBuilder();
StringReader reader = new StringReader(s);
InputSource inputSource = new InputSource(reader);
doc_ = dBuilder.parse(inputSource);

然后我有一个函数,我在其中传递一个字符串,我想将它与我的 xml 中的一个元素匹配:

void foo(String str)
{
  NodeList nodelist = doc_.getDocumentElement().getElementsByTagName(str);
}

问题是当 str 进来时它没有任何类型的命名空间,所以我要测试的 xml 将是:

<Random>
  <tns:node />
</Random>

str 将是节点。所以 nodelist 现在为空,因为它期望 tns:node 但我传入了 node。而且我知道忽略 namespace 不好,但在这种情况下它很好。我的问题是我不知道如何在忽略命名空间的同时搜索节点中的元素。我也想过将命名空间添加到传入的 str 中,但我也不知道该怎么做。

任何帮助将不胜感激,

谢谢,-乔什

最佳答案

为了匹配名称为“str”的所有节点,无论命名空间如何,请使用以下命令:

NodeList nodes = doc.getDocumentElement().getElementsByTagNameNS("*", str);

通配符“*”将匹配任何命名空间。见 Element.getElementsByTagNameNS(...) .

编辑:此外,@Wheezil 如何在评论中正确说明,您必须调用 DocumentBuilderFactory.setNamespaceAware(true) 才能使其工作,否则命名空间将不会被检测到。

关于java - 在 Java 中查找没有正确命名空间的节点中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4692605/

相关文章:

javascript - MongoDB中如何存储XML格式的数据?

c - 在 PC 中为嵌入式目标构建 C 结构

Android ListView 刷新

javascript - Ng-src 不会在 AngularJS View 中更新

jquery var 和 $(var).css

java - JAX-WS RI 生成带有硬编码文件路径的代码?

java - 引入 axis2 后 webservice 客户端出现 NullPointerException

java - XML 解析器获取 null

java - 如何在JPA中使用Plural Attributes进行条件查询?

java - 将 Hashmap 与自定义内部类一起使用时出现问题