作者:手机用户2502939543 | 来源:互联网 | 2023-06-11 12:33
一、XML解析方式有两类:一】DOM(文档对象模型)1)一次性将整个XML文件读到内存,形成一颗DOM树二】SAX(XML的简单API)[simpleAPIforXML]1)SAX
一、XML解析方式有两类:
一】DOM(文档对象模型)
1)一次性将整个XML文件读到内存,形成一颗DOM树
二】SAX(XML的简单API)[simple API for XML]
1)SAX多次将XML文件的每部分读到内存
二、步骤:
一】利用SAXReader类获取Document对象
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("src/com/suse/simpledom4j/car.xml"));
二】通过Document获取元素和属性
常用方法:
得到子元素的List集合: List elements()
得到元素的名称: String getName()
得到指定子元素引用: Element element("子元素名称");
得到子元素封装的信息: String elementText("子元素名称");
得到元素的属性值: String attributeValue("属性名");
添加一个子元素: Element addElement("子元素名称");
设置元素封装的信息: void setText("封装的信息");
删除一个子元素: boolean remove(子元素引用);
将元素转换成字符串: String asXML();
三】通过XMLWriter类将内存中的XML文件回写到硬盘上
常用类及方法:
1)OutputFormat对象:制定流的输出时在文档中的显示格式
常用方法:
返回一个优美的格式器对象:static OutputFormat createPrettyPrint();
2) XMLWriter流对象:用于将内存中的XML文件输出到硬盘上
构造方法:
XMLWriter(输出流)
常用方法:
将内存中的XML写入到硬盘上:void writer(Document document);
关闭流:void close();
三、对XML文件进行增删改查
code:
private Document getDocument() throws Exception {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("src/com/suse/simpledom4j/car.xml"));
return document;
}
@Test
public void add() throws Exception {
Document document = getDocument();
Element element = document.getRootElement();
Element carElement = (Element) element.elements().get(0);
Element priceElement = carElement.addElement("价格");
priceElement.setText("20万");
doc2XML(document);
}
@Test
public void delete() throws Exception {
Document document = getDocument();
Element element = document.getRootElement();
List elmentList = element.elements();
Element carElement = elmentList.get(0);
Element priceElement = carElement.element("价格");
carElement.remove(priceElement);
doc2XML(document);
}
@Test
public void update() throws Exception {
Document document = getDocument();
Element rootElement = document.getRootElement();
Element carElement = (Element) rootElement.elements().get(0);
carElement.element("价格").setText("60万元");
doc2XML(document);
}
@Test
public void select() throws Exception {
Document document = getDocument();
Element rootElement = document.getRootElement();
Element carElement = (Element) rootElement.elements().get(0);
String price = carElement.element("价格").getTextTrim();
System.out.println("价格为:" + price);
}
private void doc2XML(Document doc) throws Exception {
//得到一个格式优美的格式输出器
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
File file = new File("src/com/suse/simpledom4j/car.xml");
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(file), outputFormat);
xmlWriter.write(doc);
xmlWriter.close();
}
四、其它API
一】 DocumentHelper对象:
static Document createDocument();//创建一个Document对象
static Element createElement("元素名");//创建一个元素,并返回此元素的子类【注:可以使用】
static Document parseText("符合XML格式的字符串");//创建一个document对象并返回
二】在指定位置插入节点元素
----通过List集合的add(index,E)方法
方法原型:
void add(int index, E element);
三】字符串与XML文件的转换
1)字符串 ---> XML
通过parseText方法
eg:
String text = " sitinspring";
Document dDocument = DocumentHelper.parseText(text);
2)XML ---> 字符串
通过asXML方法:Document、和Element对象都具有此方法
eg:
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
Element rootElement = docuemnt.getRootElement();
Element memberElement = root.element("member");
String str_doc = document.saXML();
String str_rootEle = rootElement.asXML();
String str_memberEle = memberElement.asXML();
XML解析之dom4j