Dom4j和Xpath解析xml(包括带有命名空间的xml)
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>saxpath</groupId>
<artifactId>saxpath</artifactId>
<version>1.0-FCS</version>
</dependency>
package com.zjb.demo;
import org.dom4j.Document;
import org.dom4j.Namespace;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.List;
public class XmlDemo {
public static void main(String[] args) throws Exception {
HashMap<String, String> nameSpaceMap = new HashMap<>();
SAXReader reader = new SAXReader();
String xmlPath = "D:/test/xml/spring-context.xml";
File file = new File(xmlPath);
FileInputStream fInput = new FileInputStream(file);
Document document = reader.read(fInput);
List<Namespace> namespaceList = document.getRootElement().declaredNamespaces();
for (Namespace namespace : namespaceList) {
if (namespace.getPrefix() != null && !namespace.getPrefix().equals("")) {
nameSpaceMap.put(namespace.getPrefix(), namespace.getURI());
} else {
String uri = namespace.getURI();
nameSpaceMap.put(uri.substring(uri.lastIndexOf("/") + 1), uri);
}
}
String nodePath = "//context:property-placeholder/@location";
reader.getDocumentFactory().setXPathNamespaceURIs(nameSpaceMap);
Node node = document.selectSingleNode(nodePath);
System.out.println(node.getText());
}
}