java xml的创建和解析记录

1:// 解析方法有两种 dom(基于xml文档结构的解析)  sax(基于事件流的解析) DOM4J

几种方法:

// 1:dom:解析文档 解析器读入整个文档,然后构建一个数结构的内存:有点就是整个文档数在内存中,便于操作,支持增删改查,重新排列等多种功能
缺点把所有的节点都放到内存里面了,包括一些没有用的节点,比较浪费时间和控件..试用的场景:一点解析了文档还需要多次访问这些数据;设备条件充足
// 2:sax:事件驱动.当程序解析发现元素开始元素结束文本开始文本结束的时候,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;解析代码比较少,常使用于applet,下载。缺点不是持久的。。事件过后,若没有保存数据,那就数据就丢了。无状态性,从时间中只能得到文本,但不知道该文本属于哪个元素
//3:DOM4J是一个非常优秀的java xml api.具有强大和极端易用使用的特点。同时也是一个开源代码的软件。
//4: JDOM  优点:20-80原则 极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。


   用dom创建解析代码实例:-----------------------------------------------------------------------------------------------------------------------------------------------

package test;


import java.io.FileOutputStream;
import java.io.PrintWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
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;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Dom_xml{
private Document document = null;
private String fileName = null;
public Dom_xml(String fileName) {
super();
this.fileName = fileName;
}


//初始化dom工厂
public void init(){
try {
//文档工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//文档操作对象
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.newDocument();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

//创建xml

public void creatXml() throws Exception{

Element root = document.createElement("persons"); //创建根节点

Element person = document.createElement("person");

Element name = document.createElement("name");

name.appendChild(document.createTextNode("小小熊"));

Element sex = document.createElement("sex");

sex.appendChild(document.createTextNode("男"));

person.appendChild(name);

person.appendChild(sex);

root.appendChild(person);

Element person2 = document.createElement("person");

Element name1 = document.createElement("name");

name1.appendChild(document.createTextNode("熊小小"));

Element sex1 = document.createElement("sex");

sex1.setAttribute("备注", "男或女");

sex1.appendChild(document.createTextNode("男"));

person2.appendChild(name1);

person2.appendChild(sex1);

root.appendChild(person2);  

document.appendChild(root);

TransformerFactory factory = TransformerFactory.newInstance();

Transformer transformer = factory.newTransformer();

DOMSource source =  new DOMSource(document);

transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");

transformer.setOutputProperty(OutputKeys.INDENT, "yes");

PrintWriter pWriter = new PrintWriter(new FileOutputStream(fileName));

StreamResult streamSource = new StreamResult(pWriter);

transformer.transform(source, streamSource);

System.out.println("创建成功!");

}

//这种方式很直白  一个一个创建,追加 输出。


//解析xml

public void parserXml(String fileName) throws Exception{  

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document document = builder.parse(fileName);

NodeList nodeList = document.getChildNodes(); // dom 的特性  就是一次性读入整个文档

for(int i=0;i<nodeList.getLength();i++){

Node node = nodeList.item(i);

NodeList persoNode = node.getChildNodes();

for(int j=0;j<persoNode.getLength();j++){

Node person = persoNode.item(j);

NodeList list = person.getChildNodes(); 

for(int k=0;k<list.getLength();k++){

Node it = list.item(k);

if(it.getNodeType() == Node.ELEMENT_NODE){

System.out.println("nodeName---"+it.getNodeName());

System.out.println("nodeType---"+it.getNodeType());

System.out.println("text-------"+it.getTextContent());

NamedNodeMap map = it.getAttributes();

System.out.println("-------"+map.getNamedItem("备注"));

}

}

}

}

}

}


   用dom 4j创建和解析-----------------------------------------------------------------------------------------------------------------

public class Dom4J_xml {

//创建xml

public void createXml(String fileName) {   

Document document = DocumentHelper.createDocument();   

Element employees=document.addElement("persons");   

Element employee=employees.addElement("person");   

Element name= employee.addElement("name");   

name.setText("李华雄");   

Element sex=employee.addElement("sex");   

sex.setText("男");   

Element agElement = employee.addElement("age");

agElement.setText("10");

agElement.addAttribute("mark", "--O(∩_∩)O~--");

try {   

Writer fileWriter = new FileWriter(fileName);   

XMLWriter xmlWriter=new XMLWriter(fileWriter); 

xmlWriter.write(document);   

xmlWriter.close();  

fileWriter.close();

System.out.println("操作成功");

} catch (IOException e) {   

System.out.println(e.getMessage());   

}   

}

//解析xml

public void parserXml(String fileName){

File inputXml = new File(fileName);   

SAXReader saxReader = new SAXReader();

saxReader.setEncoding("gbk");

try {   

Document document = saxReader.read(inputXml);   

Element employees = document.getRootElement();//根节点   

for(Iterator i = employees.elementIterator(); i.hasNext();){   

Element employee = (Element) i.next();   

for(Iterator j = employee.elementIterator(); j.hasNext();){   

Element node=(Element) j.next();   

System.out.println(node.getName()+":"+node.getText());   

}   

}   

} catch (DocumentException e) {   

System.out.println(e.getMessage());   

}   

System.out.println("解析成功!");   

}  



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值