有些数据源会带有非常复杂的命名空间,例如:某国知局的专利数据

如果直接通过.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")

文章介绍了处理带有复杂命名空间的数据源时,如何使用Java的SAXReader和DocumentHelper来解析XML,并通过实现VisitorSupport清理命名空间。在去掉命名空间后,XPath选择节点的方式也会相应改变。
4710

被折叠的 条评论
为什么被折叠?



