Java使用面向对象将XML文件进行抽象,封装成了Document对象。将XML文件转换为Document文档的过程以及对应的Java代码:
1)获取Document的构造器工厂实例
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
2)创建XML构造器的DocumentBuilder实例
DocumentBuilder docBuilder = dbf.newDocumentBuilder()
3)Document文档对象
Document doc = docBuilder.parse(xmlName);
一、读取xml文件内容:
例:F盘有一个school.xml文件,现读取里面的根元素并且将根节点各个子元素的信息完整的输出来:
<?xml version = "1.0" encoding = "utf-8"?>
<School>
<Student>
<Name>沈浪</Name>
<Num>1006010022</Num>
<Classes>信管2</Classes>
<Address>浙江杭州3</Address>
<Tel>123456</Tel>
</Student>
<Student>
<Name>沈1</Name>
<Num>1006010033</Num>
<Classes>信管1</Classes>
<Address>浙江杭州4</Address>
<Tel>234567</Tel>
</Student>
<Student>
<Name>沈2</Name>
<Num>1006010044</Num>
<Classes>生工2</Classes>
<Address>浙江杭州1</Address>
<Tel>345678</Tel>
</Student>
<Student>
<Name>沈3</Name>
<Num>1006010055</Num>
<Classes>电子2</Classes>
<Address>浙江杭州2</Address>
<Tel>456789</Tel>
</Student>
</School>
package domxml;
import java.io.File;
import java.io.IOException;
//import javax.lang.model.element.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class MyDOM {
public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
File file = new File("F:" + File.separator + "school.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
Document doc = documentBuilder.parse(file);
Element ele=doc.getDocumentElement(); //获取根节点
System.out.println("根节点:"+ele.getTagName());
NodeList list=doc.getElementsByTagName("Student");//获取所有名为Student的节点
for(int i=0;i<list.getLength();i++){
System.out.println("Student"+i+"节点:");
Element node=(Element)list.item(i);
System.out.println("Name:"+node.getElementsByTagName("Name").item(0).getFirstChild().getNodeValue());
System.out.println("Num:"+node.getElementsByTagName("Num").item(0).getFirstChild().getNodeValue());
System.out.println("Classes:"+node.getElementsByTagName("Classes").item(0).getFirstChild().getNodeValue());
System.out.println("Address:"+node.getElementsByTagName("Address").item(0).getFirstChild().getNodeValue());
System.out.println("Tel:"+node.getElementsByTagName("Tel").item(0).getFirstChild().getNodeValue());
System.out.println();
}
}
}
控制台输出如下:
根节点:School
Student0节点:
Name:沈浪
Num:1006010022
Classes:信管2
Address:浙江杭州3
Tel:123456
Student1节点:
Name:沈1
Num:1006010033
Classes:信管1
Address:浙江杭州4
Tel:234567
Student2节点:
Name:沈2
Num:1006010044
Classes:生工2
Address:浙江杭州1
Tel:345678
Student3节点:
Name:沈3
Num:1006010055
Classes:电子2
Address:浙江杭州2
Tel:456789
二、生成XML文件:
使用DOM方式生成XML文件有如下几步:
1、首先是创建DOM树(即规定XML文件中的内容):
创建DocumentBuilderFactory对象
通过DocumentBuilderFactory对象创建DocumentBuilder对象
通过DocumentBuilder对象的newDocument()方法创建一个Document对象,该对象代表一个XML文件
通过Document对象的createElement()方法创建根节点
通过Document对象的createElement()方法创建N个子节点,并为他们赋值,再将这些子节点添加到根节点下
将根节点添加到Document对象下
2、其次是将DOM树转换为XML文件:
创建TransformerFactory类的对象
通过TransformerFactory创建Transformer对象
使用Transformer对象的transform()方法将DOM树转换为XML文件。(该方法有两个参数,第一个参数为源数据,需要创建DOMSource对象并将Document加载到其中;第二个参数为目的文件,即要生成的XML文件,需要创建StreamResult对象并指定目的文件)
举例如下:
package createdom;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class MyCreateXML {
public static void main(String[] args) {
Document doc=createDom();//创建DOM树
createXML(doc);
}
public static Document createDom(){
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
Document doc=builder.newDocument();
Element ele= doc.createElement("School");//创建根节点
Element student1=doc.createElement("Student");//第一个子节点
Element name=doc.createElement("Name");
name.setTextContent("张三");
student1.appendChild(name);
Element num1=doc.createElement("Num");
num1.setTextContent("0001");
student1.appendChild(num1);
Element classes1=doc.createElement("Classes");
classes1.setTextContent("计算机科学与技术");
student1.appendChild(classes1);
ele.appendChild(student1);
Element student2=doc.createElement("Student");//第二个子节点
Element name2=doc.createElement("Name");
name2.setTextContent("李四");
student2.appendChild(name2);
Element num2=doc.createElement("Num");
num2.setTextContent("0002");
student2.appendChild(num2);
Element classes2=doc.createElement("Classes");
classes2.setTextContent("软件工程");
student2.appendChild(classes2);
ele.appendChild(student2);
doc.appendChild(ele);
return doc;
}
private static void createXML(Document doc) {
TransformerFactory factory=TransformerFactory.newInstance();
Transformer transformer=null;
try {
transformer=factory.newTransformer();
} catch (TransformerConfigurationException e) {
}
File f=new File("F:"+File.separator+"school1.xml");
StreamResult outputTarget=new StreamResult(f);
try {
transformer.transform(new DOMSource(doc), outputTarget);
} catch (TransformerException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
}
}
}
打开F盘的school1.xml,内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<School>
<Student>
<Name>张三</Name>
<Num>0001</Num>
<Classes>计算机科学与技术</Classes>
</Student>
<Student>
<Name>李四</Name>
<Num>0002</Num>
<Classes>软件工程</Classes>
</Student>
</School>