package com.mipo.xml.parser;
public class App {
private static java.io.InputStream resource = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("book.xml");
public static void main(String[] args) {
// writeWithDOM4J();
// readWithDOM4J();
// writeWithJDOM();
// readWithJDOM();
// writeWithSAX();
// readWithSAX();
// writeWithDOM();
// readWithDOM();
}
/**
* DOM4J生成XML
*/
static void writeWithDOM4J() {
// 建立document对象,用来操作XML文件
org.dom4j.Document document = org.dom4j.DocumentHelper.createDocument();
// 创建根节点
org.dom4j.Element rootElement = document.addElement("persons");
// 添加person节点
org.dom4j.Element personElement = rootElement.addElement("person");
// 为person节点添加name子节点
org.dom4j.Element nameElement = personElement.addElement("name");
// 为name节点添加文本内容
nameElement.addText("郝连春水");
// 为name节点添加no属性
nameElement.addAttribute("no", "9527");
// 为person节点添加sex子节点
org.dom4j.Element sexElement = personElement.addElement("sex");
// 为sex节点添加文本内容
sexElement.addText("男");
// 添加person节点
personElement = rootElement.addElement("person");
// 为person节点添加name子节点
nameElement = personElement.addElement("name");
// 为name节点添加文本内容
nameElement.addText("纳兰容若");
// 为name节点添加no属性
nameElement.addAttribute("no", "1001");
// 为person节点添加sex子节点
sexElement = personElement.addElement("sex");
// 为sex节点添加文本内容
sexElement.addText("男");
try {
// 创建输出格式
org.dom4j.io.OutputFormat format = org.dom4j.io.OutputFormat.createPrettyPrint();
// 制定输出XML的编码类型
format.setEncoding("UTF-8");
// 创建文件输出流
org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter(
new java.io.FileWriter(new java.io.File("./src/main/resources/persons.xml")), format);
xmlWriter.write(document);
xmlWriter.flush();
xmlWriter.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
/**
* DOM4J解析XML
*/
static void readWithDOM4J() {
// 创建解析器
org.dom4j.io.SAXReader saxReader = new org.dom4j.io.SAXReader();
try {
// 读取XML文件,获得document对象
org.dom4j.Document document = saxReader.read(resource);
// 获取根节点
org.dom4j.Element rootElement = document.getRootElement();
System.out.println("根节点: " + rootElement.getName());
// 获取根节点下的所有子节点
@SuppressWarnings("unchecked")
java.util.List<org.dom4j.Element> nodes = rootElement.elements();
for (org.dom4j.Element bookElement : nodes) {
// 获取当前节点的所有属性
@SuppressWarnings("unchecked")
java.util.List<org.dom4j.Attribute> attributes = bookElement.attributes();
for (org.dom4j.Attribute attr : attributes) {
System.out.println(attr.getName() + " :: " + attr.getValue());
}
// 获取当前节点下的所有子节点
@SuppressWarnings("unchecked")
java.util.List<org.dom4j.Element> records = bookElement.elements();
for (org.dom4j.Element item : records) {
System.out.println(item.getName() + " ::: " + item.getText());
}
}
} catch (org.dom4j.DocumentException e) {
e.printStackTrace();
}
}
/**
* JDOM生成XML
*/
static void writeWithJDOM() {
// 创建根节点
org.jdom2.Element rootElement = new org.jdom2.Element("phones");
// 创建document对象
org.jdom2.Document document = new org.jdom2.Document(rootElement);
// 创建phone节点
org.jdom2.Element phone = new org.jdom2.Element("phone");
// 为phone节点子节点 <name>iPhone 6S</name>
phone.addContent(new org.jdom2.Element("name").setText("iPhone 6S"));
// 为phone节点子节点 <price type="CNY" color="RED">5800</price>
phone.addContent(new org.jdom2.Element("price").setText("5800").setAttribute("type", "CNY")
.setAttribute("color", "RED"));
// 讲person节点加入根节点
rootElement.addContent(phone);
// 创建phone节点
phone = new org.jdom2.Element("phone");
// 为phone节点子节点 <name>SUMSANG NOTE 7</name>
phone.addContent(new org.jdom2.Element("name").setText("SUMSANG NOTE 7"));
// 为phone节点子节点 <price type="CNY">7800</price>
phone.addContent(new org.jdom2.Element("price").setText("7800").setAttribute("type", "CNY"));
// 讲person节点加入根节点
rootElement.addContent(phone);
// 控制XML格式化
org.jdom2.output.Format pf = org.jdom2.output.Format.getPrettyFormat();
// XML生成
org.jdom2.output.XMLOutputter xmlOutputter = new org.jdom2.output.XMLOutputter(pf);
try {
xmlOutputter.output(document, new java.io.FileWriter(new java.io.File("./src/main/resources/phones.xml")));
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
/**
* JDOM解析XML
*/
static void readWithJDOM() {
try {
// 创建解析器
org.jdom2.input.SAXBuilder saxBuilder = new org.jdom2.input.SAXBuilder();
org.jdom2.Document document = saxBuilder.build(resource);
// 获取根节点
org.jdom2.Element rootElement = document.getRootElement();
System.out.println("根节点: " + rootElement.getName());
// 获取根节点下所有子节点
java.util.List<org.jdom2.Element> nodes = rootElement.getChildren();
for (org.jdom2.Element element : nodes) {
System.out.println("节点::" + element.getName());
// 获取当前节点下所有子节点
for (org.jdom2.Element item : element.getChildren()) {
System.out.println(item.getName() + " :: " + item.getValue());
// 获取当前节点下所有属性
for (org.jdom2.Attribute attribute : item.getAttributes()) {
System.out.println(attribute.getName() + " = " + attribute.getValue());
}
}
}
} catch (org.jdom2.JDOMException e) {
e.printStackTrace();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
/**
* SAX生成XML
*/
static void writeWithSAX() {
try {
javax.xml.transform.sax.SAXTransformerFactory saxTransformerFactory = (javax.xml.transform.sax.SAXTransformerFactory) javax.xml.transform.sax.SAXTransformerFactory
.newInstance();
javax.xml.transform.sax.TransformerHandler transformerHandler = saxTransformerFactory
.newTransformerHandler();
transformerHandler.setResult(
new javax.xml.transform.stream.StreamResult(new java.io.File("./src/main/resources/cars.xml")));
javax.xml.transform.Transformer transformer = transformerHandler.getTransformer();
transformer.setOutputProperty(javax.xml.transform.OutputKeys.VERSION, "1.0");
transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "UTF-8");
transformerHandler.startDocument();
transformerHandler.startElement("", "", "cars", null);
transformerHandler.startElement("", "", "car", null);
transformerHandler.startElement("", "", "name", null);
String text = "斯巴鲁";
transformerHandler.characters(text.toCharArray(), 0, text.length());
transformerHandler.endElement("", "", "name");
transformerHandler.startElement("", "", "price", null);
text = "250000";
transformerHandler.characters(text.toCharArray(), 0, text.length());
transformerHandler.endElement("", "", "price");
transformerHandler.endElement("", "", "car");
transformerHandler.endElement("", "", "cars");
transformerHandler.endDocument();
} catch (javax.xml.transform.TransformerConfigurationException e) {
e.printStackTrace();
} catch (javax.xml.transform.TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (org.xml.sax.SAXException e) {
e.printStackTrace();
}
}
/**
* SAX解析XML
*/
static void readWithSAX() {
try {
javax.xml.parsers.SAXParserFactory saxParserFactory = javax.xml.parsers.SAXParserFactory.newInstance();
javax.xml.parsers.SAXParser saxParser = saxParserFactory.newSAXParser();
saxParser.parse(resource, new org.xml.sax.helpers.DefaultHandler() {
@Override
public void startDocument() throws org.xml.sax.SAXException {
super.startDocument();
System.out.println("#########startDocument()");
}
@Override
public void endDocument() throws org.xml.sax.SAXException {
super.endDocument();
System.out.println("#######endDocument()");
}
@Override
public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes attributes)
throws org.xml.sax.SAXException {
super.startElement(uri, localName, qName, attributes);
System.out.println("节点名:" + qName);
for (int i = 0; i < attributes.getLength(); i++) {
System.out.println("属性: " + attributes.getValue(i));
}
}
@Override
public void endElement(String uri, String localName, String qName) throws org.xml.sax.SAXException {
super.endElement(uri, localName, qName);
}
@Override
public void characters(char[] ch, int start, int length) throws org.xml.sax.SAXException {
super.characters(ch, start, length);
System.out.println("节点内容: " + new String(ch, start, length));
}
@Override
public void skippedEntity(String name) throws org.xml.sax.SAXException {
super.skippedEntity(name);
}
});
} catch (javax.xml.parsers.ParserConfigurationException e) {
e.printStackTrace();
} catch (org.xml.sax.SAXException e) {
e.printStackTrace();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
/**
* DOM生成XML
*/
static void writeWithDOM() {
try {
// 得到 DOM 解析器的工厂实例
javax.xml.parsers.DocumentBuilderFactory dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance();
// 从 DOM 工厂中获得 DOM 解析器
javax.xml.parsers.DocumentBuilder db = dbf.newDocumentBuilder();
// 创建文档对象
org.w3c.dom.Document document = db.newDocument();
// 创建根节点
org.w3c.dom.Element rootElement = document.createElement("students");
// 创建节点student
org.w3c.dom.Element studentElement = document.createElement("student");
// 创建节点name
org.w3c.dom.Element nameElement = document.createElement("name");
// 为节点name设置文本内容
nameElement.setTextContent("周星星");
// 为节点name设置属性sex="男"
nameElement.setAttribute("sex", "男");
// 将name节点添加至student节点
studentElement.appendChild(nameElement);
// 创建节点sno
org.w3c.dom.Element snoElement = document.createElement("sno");
// 为sno节点设置文本内容
snoElement.setTextContent("9527");
// 将sno节点添加至student节点
studentElement.appendChild(snoElement);
// 创建节点id
org.w3c.dom.Element idElement = document.createElement("id");
// 为节点id设置文本内容
idElement.setTextContent("111111111111");
// 将id节点添加至student节点
studentElement.appendChild(idElement);
// 将student节点添加至根节点
rootElement.appendChild(studentElement);
// 获取 TransformerFactory 的实例
javax.xml.transform.TransformerFactory tf = javax.xml.transform.TransformerFactory.newInstance();
// 获取 Transformer
javax.xml.transform.Transformer transformer = tf.newTransformer();
// 转化输出
transformer.transform(new javax.xml.transform.dom.DOMSource(rootElement),
new javax.xml.transform.stream.StreamResult(new java.io.File("./src/main/resources/students.xml")));
} catch (org.w3c.dom.DOMException e) {
e.printStackTrace();
} catch (javax.xml.transform.TransformerConfigurationException e) {
e.printStackTrace();
} catch (javax.xml.parsers.ParserConfigurationException e) {
e.printStackTrace();
} catch (javax.xml.transform.TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (javax.xml.transform.TransformerException e) {
e.printStackTrace();
}
}
/**
* DOM解析文件
*/
static void readWithDOM() {
try {
// 得到 DOM 解析器的工厂实例
javax.xml.parsers.DocumentBuilderFactory dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance();
// 从 DOM 工厂中获得 DOM 解析器
javax.xml.parsers.DocumentBuilder db = dbf.newDocumentBuilder();
// 解析XML文件
org.w3c.dom.Document doc = db.parse(resource);
// 获取根节点
org.w3c.dom.Element rootElement = doc.getDocumentElement();
// 获取根节点的节点名称
System.out.println("根节点名: " + rootElement.getNodeName());
// 获取根节点下第一个元素节点的节点名
System.out.println("根节点下第一个元素节点 :" + rootElement.getFirstChild().getNextSibling().getNodeName());
// 获取根节点下最后一个元素节点的节点名
System.out.println("根节点下最后一个元素节点 :" + rootElement.getLastChild().getPreviousSibling().getNodeName());
// 获取根节点下所有子节点
org.w3c.dom.NodeList nodes = rootElement.getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
org.w3c.dom.Node bookNode = nodes.item(i);
// 若为空文本节点,忽略
if (org.w3c.dom.Node.TEXT_NODE == bookNode.getNodeType()) {
continue;
}
// 获取节点名称
System.out.println("子节点: " + bookNode.getNodeName());
// 获取当前节点下所有子节点
org.w3c.dom.NodeList records = bookNode.getChildNodes();
for (int j = 0; j < records.getLength(); j++) {
org.w3c.dom.Node record = records.item(j);
// 若为空文本节点,忽略
if (org.w3c.dom.Node.TEXT_NODE == record.getNodeType()) {
continue;
}
// 获取当前节点的文本内容
System.out.println(record.getNodeName() + " : " + record.getFirstChild().getNodeValue());
// 获取当前元素节点下所有属性
org.w3c.dom.NamedNodeMap attributes = record.getAttributes();
if (null != attributes && attributes.getLength() > 0) {
for (int k = 0; k < attributes.getLength(); k++) {
org.w3c.dom.Node attr = attributes.item(k);
// 获取属性名、属性值
System.out.println(attr.getNodeName() + " :: " + attr.getNodeValue());
}
}
}
}
} catch (javax.xml.parsers.ParserConfigurationException e) {
e.printStackTrace();
} catch (java.io.FileNotFoundException e) {
e.printStackTrace();
} catch (org.xml.sax.SAXException e) {
e.printStackTrace();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
}
xml文件解析——历程
猜你喜欢
转载自blog.csdn.net/footprint01/article/details/82593712
今日推荐
周排行