在 Java 中查找没有适当命名空间的节点中的元素

2022-09-02 00:54:21

所以我有一个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);
}

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

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

,并且将是节点。所以nodelist现在是空的,因为它期望tns:node,但我传入了node。我知道忽略命名空间不好,但在这种情况下,它很好。我的问题是我不知道如何在忽略命名空间的情况下在Node中搜索元素。我还考虑过将命名空间添加到进来的str中,但我也不知道如何做到这一点。str

任何帮助将不胜感激,

谢谢, -乔希


答案 1

为了匹配名称为“str”的所有节点,而不考虑命名空间,请使用以下命令:

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

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

编辑:此外,如何在注释中正确说明@Wheezil,您必须调用它才能工作,否则将无法检测到命名空间。DocumentBuilderFactory.setNamespaceAware(true)


答案 2