我们正在使用 dom4j 1.6.1 来解析来自某个地方的 XML。有时,应答器会提到命名空间(例如:),有时则不()。并且调用 Element.selectSingleNode(String s ) 失败。
目前我们有 3 个解决方案,但我们对它们不满意
1 - 在对 xml 文档执行任何操作之前删除所有出现的命名空间
xml = xml .replaceAll("xmlns=\"[^\"]*\"","");
xml = xml .replaceAll("ds:","");
xml = xml .replaceAll("etm:","");
[...] // and so on for each kind of namespace
2 - 在获取节点之前删除命名空间通过调用
Element.remove(Namespace ns)
但它仅适用于节点和第一级子级
3 - 使代码混乱
node = rootElement.selectSingleNode(NameWithoutNameSpace)
if ( node == null )
node = rootElement.selectSingleNode(NameWithNameSpace)
所以你怎么看 ?女巫一号是不是越差?您还有其他解决方案要提出吗?