XML是一种可扩展的标记语言,可扩展就是可以增加,删除,修改,标记语言就是加了<>符号的
讲讲xml的书写格式:
1.开头固定
2.只能有一个根元素
3.没了
<?xml version="1.0" encoding="UTF-8"?> <Students> <student> <name>许嵩</name> <age>32</age> </student> <student> <name>蜀云泉</name> <age>23</age> </student> </Students>
我写了一个,开头的第一行是固定的,当然也可以多写。这个是告诉别人,我是xml文件
下面来介绍一下Java是怎么操作xml的,也可以说是怎么操作DOM的,以前一直听说DOM,Dom就是不知道是什么,原来DOM就是内存中的一个树形结构的数据称谓,xml的数据就是树形结构的,在内存中就是DOM
一、Java读取xml
比如上面的xml文件,我想获取第二个student元素的name里面的文本,操作如下:
private File f=new File("F:/Study Java/ch1helloworld/src/main/java/com/StadyJava/day2/xmldemo.xml"); public void testDocument() throws ParserConfigurationException, IOException, SAXException { //1. DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //2. DocumentBuilder builder=factory.newDocumentBuilder(); //3 经过这3步获取到了文档 Document doc=builder.parse(f); //上面的三步可以写成这样 //Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f); //已经获取了文档对象,现在获取xml的根元素 Element root=doc.getDocumentElement(); //获取第二个student 因为返回的是父类型Node,所以需要强转一下 Element student2=(Element) root.getElementsByTagName("student").item(1); //获取第二个student元素的子元素name Element name2=(Element) student2.getElementsByTagName("name").item(0); //获取name元素的文本内容 System.out.println(name2.getTextContent()); }
1.获取xml文件
2.获取根元素students
3.获取根元素下面的第二个student元素
4.获取第二个student元素的name元素
5.获取name的文本内容
二、Java更改xml
这里我们准备把许嵩的年龄改为18
其实操作和上面的读取差不多,只不过多了一个从内存更新到磁盘的步骤
public void setxml() throws Exception { //获取文档对象 Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f); //已经获取了文档对象,现在获取xml的根元素 Element root=doc.getDocumentElement(); //获取第一个student 因为返回的是父类型Node,所以需要强转一下 Element student1=(Element) root.getElementsByTagName("student").item(0); //获取第一个student元素的子元素age Element age1=(Element) student1.getElementsByTagName("age").item(0); //更新age元素的文本内容,这里仅仅的更新了内存中的DOM,还要更新到磁盘的xml源文件 age1.setTextContent("18"); //同步内存中的数据到磁盘中的源文件 Transformer trans=TransformerFactory.newInstance().newTransformer(); Source xmlSource=new DOMSource(doc); //内存中的DOM Result outputTarget=new StreamResult(f); //磁盘中的xml文件 trans.transform(xmlSource,outputTarget);//从内存更新到磁盘 }
未完待续...