所以我有一个我在这里声明的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现在为null,因为它期望tns:node但我传入了node。我知道忽略命名空间并不好,但在这种情况下它很好。我的问题是我不知道如何在忽略命名空间的同时在Node中搜索元素。我还想过将命名空间添加到str中,但我不知道如何做到这一点。
非常感谢任何帮助,
谢谢,-Josh
答案 0 :(得分:32)
为了匹配名称为“str”的所有节点,无论命名空间如何,请使用以下命令:
NodeList nodes = doc.getDocumentElement().getElementsByTagNameNS("*", str);
通配符“*”将匹配任何名称空间。请参阅Element.getElementsByTagNameNS(...)。
编辑:此外,@ Wheezil如何在评论中正确陈述,您必须调用DocumentBuilderFactory.setNamespaceAware(true)
才能使其生效,否则将无法检测到命名空间。