Dom4j解析带有命名空间的XML文件(2)

首先,声明一个Map对象,添加命名空间,Map的键为命名空间的名称,这里是默认命名空间所以这里Map的键可以随便取,我取名叫default,Map的值为命名空间的值,即。然后,声明一个XPath对象,在createXPath方法中,要使用带命名空间前缀的XPath表达式,即defau:name。最后,调用setNamespaceURIs方法,设置XPath的命名空间。

运行结果如下:

长安大学渭水校区

方法二:设置你的DocumentFactory()的命名空间 setXPathNamespaceURIs

实例如下:

public class KMLReader2 {

public static void main(String[] args) throws DocumentException {
  //方法二:设置你的DocumentFactory()的命名空间 setXPathNamespaceURIs
  Map<String, String> xmlMap = new HashMap<>();
  xmlMap.put("default", "http://www.opengis.net/kml/2.2");
  xmlMap.put("gx", "http://www.google.com/kml/ext/2.2");
 
  SAXReader reader = new SAXReader();
  reader.getDocumentFactory().setXPathNamespaceURIs(xmlMap);
  Document document = reader.read(new File("长安大学渭水校区.kml"));
 
  Node name = document.selectSingleNode("//default:name");
  System.out.println(name.getText());
 
  Node altitudeMode = document.selectSingleNode("//gx:altitudeMode");
  System.out.println(altitudeMode.getText());
 }
}

这里,我们设置的不是XPath的命名空间了,而是DocumentFactory的命名空间,其原理都差不多,只不过作用范围不一样,设置XPath的命名空间作用在XPath表达式,设置DocumentFactory作用在整个Document对象上。所以这里不再啰嗦,和上面一样。

运行结果如下:

长安大学渭水校区

relativeToSeaFloor

方法三:不使用开发环境给你提供的一系列对象,而是用XPath语法中自带的local-name() 和 namespace-uri()指定你要使用的节点名和命名空间

实例如下:

public class KMLReader3 {

public static void main(String[] args) throws DocumentException {
  // 不使用开发环境给你提供的一系列对象,而是用XPath语法中自带的local-name() 和 namespace-uri()
  // 指定你要使用的节点名和命名空间
  SAXReader reader = new SAXReader();
  Document document = reader.read(new File("长安大学渭水校区.kml"));

Node name = document
    .selectSingleNode("//*[local-name()='name' and namespace-uri()='http://www.opengis.net/kml/2.2']");
  System.out.println(name.getText());
 }
}

这里直接在XPath表达式中指出命名空间,local-name()代表元素名称,namespace-uri()代表元素所在命名空间。

运行结果如下:

长安大学渭水校区

方法四:不使用XPath表达式,直接用element的element方法取一个子元素或elementIterator方法取多个元素

实例如下:

public class KMLReader4 {

public static void main(String[] args) throws DocumentException {
  //不使用XPath,直接用element的element方法取一个子元素或elementIterator方法取多个元素
  SAXReader reader = new SAXReader();
  Document document = reader.read(new File("长安大学渭水校区.kml"));
 
  Element root = document.getRootElement();
  Element name = root.element("Document").element("name");
  System.out.println(name.getText());
 }
}

这种方法是Dom4j的入门方法,这里不再叙述。

运行结果如下:

长安大学渭水校区

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/9967bb8d430ad596d5498e50e8e88d5a.html