java解析XML文件有四种方法,java官方提供两种解析方式DOM和SAX解析XML其他组织在DOM的基础上有增加了JDOM和DOM4J的方式解析
首先了解DOM解析和生成XML方式,根据当前节点名称获取所有的节点,然后循环获取当前节点的子节点。
创建一个department.xml文件内容如下
<?xml version="1.0" encoding="UTF-8"?>
<department>
<employee id="1" name="gong">
<name>jason</name>
<sex>1</sex>
<age>24</age>
</employee>
<employee id="2">
<name>king</name>
<sex>1</sex>
<age>18</age>
</employee>
</department>
public class DOM_Parse {
/**
* 利用DOM方式对xml进行解析
*
* */
public static void main(String[] args) {
parseXML();
createXML();
}
// 创建XMl文件
public static void createXML() {
// 创建DocumentBuilderFactory对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 用factory创建DocumentBuilder对象
DocumentBuilder db;
try {
db = factory.newDocumentBuilder();
// 通过DocumentBuilder对象的创建一个新的Document
Document document = db.newDocument();
// 创建一个根节点
Element depNode = document.createElement("department");
// 把根节点添加到document中
document.appendChild(depNode);
// 创建一个employee子节点
Element empNode = document.createElement("employee");
// 设置子节点的属性
empNode.setAttribute("id", "1");
// 把子节点添加到根节点中
depNode.appendChild(empNode);
// 创建employee节点的子节点name
Element name = document.createElement("name");
name.setTextContent("gong");
// 创建employee节点的子节点age
Element age = document.createElement("age");
age.setTextContent("12");
// 创建employee节点的子节点sex
Element sex = document.createElement("sex");
sex.setTextContent("女");
empNode.appendChild(name);
empNode.appendChild(age);
empNode.appendChild(sex);
// 创建TransformerFactory对象
TransformerFactory tff = TransformerFactory.newInstance();
// 创建Transformer对象
Transformer tf = tff.newTransformer();
// tf.transform(xmlSource, outputTarget);
tf.transform(new DOMSource(document), new StreamResult(new File(
"dep.xml")));
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 解析XML
public static void parseXML() {
// 创建DocumentBuilderFactory对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
// 用factory创建DocumentBuilder对象
DocumentBuilder db = factory.newDocumentBuilder();
// 通过DocumentBuilder对象的parse()方法加载xml文件
Document document = db.parse("department.xml");
/*
* 可指定xml文件 File file=new
* File("C:/Users/GONG/Desktop/department.xml"); Document
* document=db.parse(File);
*/
// 得到所有employee标签
NodeList empList = document.getElementsByTagName("employee");
System.out.println("有" + empList.getLength() + "个employee");
// 遍历所有节点
for (int i = 0; i < empList.getLength(); i++) {
// 获取employee节点,item索引从0开始
Node emp = empList.item(i);
// 获取employee的属性集合
NamedNodeMap attrs = emp.getAttributes();
System.out.println("当前是第" + (i + 1) + "个节点");
// 遍历employee的属性
for (int j = 0; j < attrs.getLength(); j++) {
Node node = attrs.item(j);
System.out.print("属性名:" + node.getNodeName() + " 属性值: "
+ node.getTextContent() + ",");
}
System.out.println();
// 获取emp所有子节点元素
NodeList childnodeList = emp.getChildNodes();
System.out
.println("当前emp点有" + childnodeList.getLength() + "元素");
// 遍历emp中的子节点元素
for (int k = 0; k < childnodeList.getLength(); k++) {
Node childElement = childnodeList.item(k);
// 区分出text类型的node以及element类型的节点
if (childElement.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("节点名:" + childElement.getNodeName()
+ " 节点值:"
+ childElement.getFirstChild().getNodeValue()
+ ",");
}
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}