3.1XML解析
(xml的增删改查)
1:XML的使用范围
2:XML的声明
文档类型定义:(用于验证XML文件中的元素类型是否合法)
DTD:
XSD:Xml Schema
3:XML的组成
XML中也是由节点来组成。
根节点 Root节点
元素节点 Element节点
属性节点 Attribute节点
文本节点 Text节点
注释节点 Comment节点
CDATA节点。
文档节点: document节点
4:特殊字符
HTML 空格。
& &
XML
A:转义字符。与HTML中的转义字符一样。
B:CDATA节点。
5:XML的解析:
服务端解析
JDK:
DOM
SAX
JAXB java and xml Binding
开源
JDOM
DOM4J:hibernate框架就是使用dom4j来解析映射文件。
X-Stream:java跟XML之间转换的工具(java转成xml文件/字符串,
xml文件/字符串转为java对象)
DOM/SAX/JDom/Dom4J之间的区别:
DOM/JDom:将XML文件中的内容一次性的读取到内存中。读取数据量比较少的数据有优势。
SAX: 基于事件的驱动。读取数据量比较大的XML文件。
解析XML的步骤:
A:获取解析器
B:解析XML文件。
C:获取Document文档对象
D:获取根节点
E:通过根节点来操作底下的子节点。
DOM4J
Reader
DomReader
SaxReader
CDATA节点的修改:
先删除再添加。
6、
Dom4J的使用:
5.xml的修改:需要读取xml文件然后根据修改构建一份新的xml写入到本地覆盖原来的。 7、例子代码
package com.test; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class TestXML { public static void main(String[] args) { TestXML testXML = new TestXML(); // testXML.readXML(); // testXML.addXML(); // testXML.deleteXML(); testXML.updateXML(); } private void readXML() { /** * XML的解析的标准步骤 * * 1:创建一个XML的解析器。 * * 2:解析器解析XML文件,返回一个Document的元素节点。 * * 3:通过Document来获取一个根节点的对象。 * * 4:通过根节点来获取底下的子节点。 */ File xmlFile = new File( "D:WorkSpace6.5java1603EclipseXml_Projectsrcstudent.xml"); SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read(xmlFile); Element root = document.getRootElement(); System.out.println(root.getName() + "t" + root.getNodeTypeName()); List<Element> childList = root.elements(); System.out.println(childList.size()); childList = root.elements("student"); System.out.println(childList.size()); for (Element stuElement : childList) { String stu_id = stuElement.attributeValue("id"); Element stu_nameElement = stuElement.element("stu_name"); String stu_name = stu_nameElement.getText(); String stu_age = stuElement.elementText("stu_age"); String stu_sex = stuElement.elementText("stu_sex"); String stu_content = stuElement.elementText("stu_content"); System.out.println(stu_id + "t" + stu_name + "t" + stu_age + "t" + stu_sex + "t" + stu_content); } } catch (Exception e) { e.printStackTrace(); } } private void addXML() { File xmlFile = new File( "D:WorkSpace6.5java1603EclipseXml_Projectsrcstudent.xml"); SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read(xmlFile); Element root = document.getRootElement(); /** * 在root中添加一个student的元素节点 */ // <student></student> Element student = root.addElement("student"); // 在student元素添加属性节点 // <student id = "4"></student> student.addAttribute("id","4"); /** * 在student元素下面加入stu_name节点 */ Element stu_name = student.addElement("stu_name"); stu_name.setText("王五"); Element stu_age = student.addElement("stu_age"); stu_age.setText("30"); Element stu_sex = student.addElement("stu_sex"); stu_sex.setText("男"); Element stu_content = student.addElement("stu_content"); stu_content.addCDATA("!@#$%^&*&^YHGKPPLKjhfd;afdsl;alsdf"); /** * 将内容重新写回到XML文件中。 */ OutputStream outputStream = new FileOutputStream(xmlFile); OutputFormat outputFormat = OutputFormat.createPrettyPrint(); outputFormat.setIndent(true); outputFormat.setIndent("t"); XMLWriter xmlWriter = new XMLWriter(outputStream,outputFormat); xmlWriter.write(document); xmlWriter.flush(); xmlWriter.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 删除XML中的元素 */ private void deleteXML() { File xmlFile = new File( "D:WorkSpace6.5java1603EclipseXml_Projectsrcstudent.xml"); SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read(xmlFile); Element root = document.getRootElement(); List<Element> childList = root.elements("student"); for (Element stuElement : childList) { String stu_id = stuElement.attributeValue("id"); if (stu_id.equals("5")) { root.remove(stuElement); break; } } /** * 将内容重新写回到XML文件中。 */ OutputStream outputStream = new FileOutputStream(xmlFile); OutputFormat outputFormat = OutputFormat.createPrettyPrint(); outputFormat.setIndent(true); outputFormat.setIndent("t"); XMLWriter xmlWriter = new XMLWriter(outputStream,outputFormat); xmlWriter.write(document); xmlWriter.flush(); xmlWriter.close(); } catch (Exception e) { e.printStackTrace(); } } private void updateXML() { File xmlFile = new File( "D:WorkSpace6.5java1603EclipseXml_Projectsrcstudent.xml"); SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read(xmlFile); Element root = document.getRootElement(); List<Element> childList = root.elements("student"); for (Element stuElement : childList) { String stu_id = stuElement.attributeValue("id"); if (stu_id.equals("2")) { /** * 更改XML中元素节点的数据 */ Element stu_name = stuElement.element("stu_name"); Element stu_age = stuElement.element("stu_age"); Element stu_sex = stuElement.element("stu_sex"); Element stu_content = stuElement.element("stu_content"); stu_name.setText("修改操作"); stu_age.setText("20"); stu_sex.setText("gril"); /** * 由于Dom4j中没有提供CDATA节点修改的操作。 * * 变通:先删除节点,然后再添加CDATA节点的操作 */ stuElement.remove(stu_content); stu_content = stuElement.addElement("stu_content"); stu_content.addCDATA("CDATA节点被修改了.....l.asidfuaosdf"); break; } } /** * 将内容重新写回到XML文件中。 */ OutputStream outputStream = new FileOutputStream(xmlFile); OutputFormat outputFormat = OutputFormat.createPrettyPrint(); outputFormat.setIndent(true); outputFormat.setIndent("t"); XMLWriter xmlWriter = new XMLWriter(outputStream,outputFormat); xmlWriter.write(document); xmlWriter.flush(); xmlWriter.close(); } catch (Exception e) { e.printStackTrace(); } } }8、student.xml
<?xml version="1.0" encoding="UTF-8"?> <root> <student id="1"> <stu_name>aaa</stu_name> <stu_age>21</stu_age> <stu_sex>男</stu_sex> <stu_content>1+23</stu_content> </student> <student id="2"> <stu_name>修改操作</stu_name> <stu_age>20</stu_age> <stu_sex>gril</stu_sex> <stu_content><![CDATA[CDATA节点被修改了.....l.asidfuaosdf]]></stu_content> </student> <teacher t_id="3" /> <student id="4"> <stu_name>admin</stu_name> <stu_age>10</stu_age> <stu_sex>男</stu_sex> <stu_content><![CDATA[!@#$%^&*&^YHGKPPLKjhfd;afdsl;alsdf]]></stu_content> </student> <student id="5"> <stu_name>test</stu_name> <stu_age>20</stu_age> <stu_sex>女</stu_sex> <stu_content><![CDATA[!@#$%^&*&^YHGKPPLKjhfd;afdsl;alsdf]]></stu_content> </student> <student id="6"> <stu_name>guest</stu_name> <stu_age>30</stu_age> <stu_sex>男</stu_sex> <stu_content><![CDATA[!@#$%^&*&^YHGKPPLKjhfd;afdsl;alsdf]]></stu_content> </student> </root> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |