xml解析进一步学习

来源:互联网 发布:单片机仿真软件有哪些 编辑:程序博客网 时间:2024/04/29 13:25

复习昨日学习内容:

package com.xml.sax;


import java.io.File;


import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;


import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;


public class SAXTest1 {


public static void main(String[] args) throws Exception, SAXException {
SAXParserFactory factory = SAXParserFactory.newInstance();// 得到解析器工厂
SAXParser sp = factory.newSAXParser();// 得到解析器
/*
* XMLReader sreader=sp.getXMLReader(); //得到读取器
* sreader.setContentHandler(new shuiguohandler()); //设置ContentHandler
* sreader.parse("src/shuiguo.xml"); //设置解析文件
*/
sp.parse(new File("src/shuiguo.xml"), new shuiguohandler1());
}
}


class shuiguohandler1 extends DefaultHandler {
private boolean isok;
private int count = 0;
private int pos = 2;


public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
if (isok && count == pos) {
System.out.println(" characters()解析内容:"
+ new String(ch, start, length));
}
}


public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
if (qName.equals("梨")) {
if (count == pos) {
System.out.println("endElement()结束元素:" + qName);
}
isok = false;
}
}


public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
if (qName.equals("梨")) {
isok = true;
count++;
if (count == pos) {
System.out.println("startElement()开始元素:" + qName);
}
}
}


}

DOm4j在指定位置添加节点

 1.得到插入位置的节点列表(list)

  2.调用list.add(index,elemnent),由index决定element的插入位置。

  Element元素可以通过DocumentHelper对象得到。示例代码:

  Element aaa = DocumentHelper.createElement("aaa");

  aaa.setText("aaa");

  List list = root.element("书").elements();

  list.add(1, aaa);

  //更新document

例题:

package com.xml.dom4j;


import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;


import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;


public class Dom4jTest {


public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/shuiguo.xml")); // 得到文档的dom模型
Element root = doc.getRootElement(); // 获取文档的根节点
// System.out.println(root.getName()+root.getText()+root.getNodeTypeName());


/*
* Element apple=((Element)(root.elements("水果").get(1))).element("苹果");
* //用element()或elements()获取自己想要的节点 System.out.println(apple.getText());
*/


//addTest(root, doc);
//updateTest(root,doc);
//deleteTest(root,doc);
listTest(root);
}
public static void listTest(Element root) {
System.out.println(root.getName());
List<Element> list=root.elements();
for(Element child:list){
listTest(child);
}
}
public static void deleteTest(Element root, Document doc) {
Element grape=root.element("水果").element("葡萄");
grape.getParent().remove(grape);
writerFile(doc);
}
public static void updateTest(Element root, Document doc) {
Element grape=root.element("水果").element("葡萄");
grape.setText("葡萄");
writerFile(doc);
}
public static void addTest(Element root, Document doc){
List list = root.element("水果").elements(); // 找到要添加节点的位置
Element grape = DocumentHelper.createElement("葡萄"); // 创建要添加的元素
grape.setText("grapegrapegrape"); // 设置元素内容
list.add(0, grape); // 将元素添加到指定位置中
writerFile(doc);
}
public static void writerFile(Document doc) {
//不设置字符集的写入方法(建议全部是英文字母的文档使用)
/* try {
XMLWriter writer=new XMLWriter(new FileWriter("src/shuiguo.xml"));//创建xmlwriter对象
writer.write(doc);   //利用writer对象的write(document)方法写入xml文档
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/
//设置字符集,(有中文的文档使用)
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
try {
XMLWriter writer=new XMLWriter(new FileWriter("src/shuiguo.xml"),format);//创建xmlwriter对象
writer.write(doc);   //利用writer对象的write(document)方法写入xml文档
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


原创粉丝点击