22

所以我有一个我在这里声明的 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。而且我知道忽略名称空间不好,但在这种情况下它很好。我的问题是我不知道如何在忽略命名空间的同时搜索节点中的元素。我还考虑将命名空间添加到传入的 str 中,但我也不知道该怎么做。

任何帮助将不胜感激,

谢谢,-乔什

4

1 回答 1

43

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

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

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

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

于 2011-01-14T15:43:14.243 回答