有些数据源会带有非常复杂的命名空间,例如:某国知局的专利数据
如果直接通过.asXML()输出结果会变成如下样式:
为此,我们希望去掉命名空间,采用以下方法:
// SAXReader saxReader = new SAXReader();
// Document document = saxReader.read("test.xml");
Document document = DocumentHelper.parseText("xxxxx");
document.accept(new NameSpaceCleaner());
private static final class NameSpaceCleaner extends VisitorSupport {
public void visit(Element element) {
if (element instanceof DefaultElement) {
((DefaultElement) element).setNamespace(Namespace.NO_NAMESPACE);
}
}
//.....
//.....
//这里我只去掉了Element 的命名空间,如果还想去掉别的,可以自行添加
//public void visit(Object1 obj){...}
//public void visit(Object2 obj){...}
}
这里注意,去掉命名空间之前,如果通过xpath定位某个节点需要用
selectNode("命名空间:XXXX")
按上述方法去掉命名空间后,再定位某个节点就需要带上命名空间了
selectNode("XXXX")