A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 迦南 中级黑马   /  2014-8-24 23:58  /  801 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.创建工厂
2.得到dom解析器
3.解析xml文档,得到代表文档的document
DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
DocumentBuilder builder =factory.newDocumentBuilder();
Document document =builder.parse("src/book.xml");
使用dom方式对xml文档进行crud
//读取
public void read1(){
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = factory.newDocumentBuilder();
   Document document = builder.parse("src/book.xml");
   NodeList list = document.getElementsByTagName("书名");
   Node node = list.item(1);
   String content = node.getTextContent();
   System.out.println(content);
}
//得到xml文档的所有内容
public void read2(){
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = factory.newDocumentBuilder();
   Document document = builder.parse("src/book.xml");
    Nodenode = document.getElementsByTagName("书架").item(0);
   list(root);
   
}
private void list(Node node){
   if(node instanceof Element)  //打印出文档标签,
   System.out.println(node.getNodeName());
   NodeList list = node.getChildNodes();
   for(int i=0;i<list.getLength();i++){
       Node child = list.item(i);
       list(child);
    }
}
//得到xml文档的属性的值
public void read3(){
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = factory.newDocumentBuilder();
   Document document = builder.parse("src/book.xml");
   Element bookname = (Element)document.getElementsByTagName("书名").item(0);
   String value = bookname.getAttribute("name");
   System.out.println(value);
}
//xml文档进行增加
public void add(){
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = factory.newDocumentBuilder();
   Document document = builder.parse("src/book.xml");
   //创建节点
   Element price = document.createElement("售价");
    price.setTextContent("89.00");
   //把创建的节点挂到第一本书上
   Element book = document.getElementsByName("").item(0);
   book.appendChild(price);
   //把更新后的内存写回到xml文档
   TransfoemerFactory  tffactory =TransfoemerFactory.newInstance();
   Transformer tg = tffactory.newTransfoemer();
   ty.transform(new DOMSource(document),new Stream Result(newFileOutputStream("src/book.xml")));
}
//向文档中指定位置上添加节点
public void add(){
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = factory.newDocumentBuilder();
   Document document = builder.parse("src/book.xml");
   //创建节点
   Element price = document.createElement("售价");
   price.setTextContent("89.00");
   //把创建的节点挂到第一本书上
   Element refNode = document.getElementsByName("售价").item(0);
   //book节点的指定位置插入
   Element book = document.getElementsByName("").item(0);
   book.appendChild(price);
   //把更新后的内存写回到xml文档
   TransfoemerFactory  tffactory =TransfoemerFactory.newInstance();
   Transformer tg = tffactory.newTransfoemer();
   ty.transform(new DOMSource(document),new Stream Result(newFileOutputStream("src/book.xml")));
}
Element e = (Element)document.getElementsByTagName("售价").item(0);
e.getParentNode().getParentNode().removeChild(e.getParentNode());
TransfoemerFactory tffactory =TransformerFactory.newInstance();
Transformer tf =tffactory.newTransformer();
tf.transform(new DOMSource(document),newStreamResult(new FileOutputStream("src\book.xml")));
SAX解析
在使用DOM解析XML文档时,需要读取整个XML文档,在内存中构架代表整个DOM树的Document对象,从而再对XML文档进行操作,,此种情况下,如果XML文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。
SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会对文档进行操作。
SAX采用事件处理的方式解析XML文件,利用sax解析xml文档,涉及两个部分:解析器和事件处理器:
解析器可以使用JAXPAPI创建,创建出sax解析器后,就可以指定解析器去解析某个xml文档。
解析器采用sax方式在解析某个xml文档时,它只要解析到xml文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到xml文件内容作为方法的参数传递给事件处理器
事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松的得到解析器解析到的数据,从而可以决定如何对数据进行处理。
1.创建解析工厂
SAXParserFactory factory =SAXFactory.newInstance();
2.得到解析器
SAXParser sp = factory.newSAXParser();
3.得到读取器
XMLReader reader = sp.getXMLReader();
4.设置内容处理器
reader.setContentHanler(new ListHandler());
5.读取xml文档内容
reader.parse("src/book.xml");
//得到xml文档所有内容
class ListHandler implements ContentHandler
public void startElement(String uri,StringlocalName,String name,Attributes atts)
System.out.println("<"+name+">");
for(int i=0;atts!=null &&i<atts.getLength();i++){
   String attName = atts.getQName(i);
   String attValue = atts.getValue(i);
}
public void endDocument
System.out.println(newString(ch,start,length));




1 个回复

倒序浏览
总结的不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马