关于XML解析的方式(个人喜爱的方式,有些不常用的就不写了)
需要的jar包 dom4j / jaxen
XML示例(该文件放置于src目录下)
<?xml version="1.0" encoding="utf-8"?>
<china>
<province name="北京">
<city>东城区</city>
<city>西城区</city>
</province>
<province name="天津">
<city>和平区</city>
<city>河东区</city>
</province>
<province name="河北">
<city>石家庄</city>
<city>衡水</city>
</province>
</china>
1.获取结点的属性
SAXReader reader = new SAXReader();
InputStream input = reader.getClass().getClassLoader().getResourceAsStream("xml.xml");
Document doc = reader.read(input);
List<Attribute> provinceNameAttributeList = doc.selectNodes("//province/@name");
2.根据结点名称获取结点属性
SAXReader reader = new SAXReader();
InputStream input = reader.getClass().getClassLoader().getResourceAsStream("xml.xml");
Document doc = reader.read(input);
List<Element> eles = doc.selectNodes("//province");
for(Element ele :eles){
System.out.println(ele.attributeValue("name"));
}
3.解析有命名空间的xml (就是带xmlns="XXX"的xml)
SAXReader reader = new SAXReader();
InputStream input = reader.getClass().getClassLoader().getResourceAsStream("xml.xml");
Document doc = reader.read(input);
XPath xpath = doc.createXPath("//ns:china//ns:province");
HashMap<String, String> hm = new HashMap<String,String>();
hm.put("ns", "http:www.xxxx.xxx");
xpath.setNamespaceURIs(hm);
List<Element> eles = xpath.selectNodes(doc);
for(Element ele :eles){
System.out.println(ele.attributeValue("name"));
}
4.一些老方法,jdk自带
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(Way4.class.getClassLoader().getResourceAsStream("xml.xml"));
Element root = doc.getDocumentElement();
NodeList province = root.getElementsByTagName("province");
for(int i = 0 ; i<province.getLength();i++){
if(province.item(i) instanceof Element){
Element e = (Element) province.item(i);
System.out.println(e.getAttribute("name"));
}
}
5.构建xml文件
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element bookstore = document.createElement("bookstore");
Element book = document.createElement("book");
book.setAttribute("id", "1");
Element name = document.createElement("name");
name.setTextContent("安徒生童话");
book.appendChild(name);
Element author = document.createElement("author");
author.setTextContent("安徒生");
book.appendChild(author);
Element price = document.createElement("price");
price.setTextContent("49");
book.appendChild(price);
bookstore.appendChild(book);
document.appendChild(bookstore);
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.setOutputProperty(OutputKeys.INDENT, "yes");
OutputStream dest = new FileOutputStream(new File("文件路径"));
tf.transform(new DOMSource(document), new StreamResult(dest ));
6.还有一些方式,以后再补充,睡觉
