分类: XML2011-08-23 19:19 167人阅读 评论(0) 收藏 举报

DOM解析:

1:
public class DomPaeseXml {

public static void main(String[] args) throws Exception {
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = dbf.newDocumentBuilder();
  Document document = db.parse(new File("student.xml") ) ;
  
//  System.out.println(document.getXmlVersion());
//  System.out.println(document.getXmlStandalone());
//  System.out.println(document.getXmlVersion());
  
  Element element = document.getDocumentElement();
  System.out.println(element.getNodeName());
  
  NodeList list = element.getChildNodes();
  System.out.println(list.getLength());
  
  for (int i = 0; i < list.getLength(); i++) {
   System.out.println(list.item(i).getNodeName());
  }
  System.out.println("***************************");
  NodeList nodeList = document.getElementsByTagName("学生");
  for (int i = 0; i < nodeList.getLength(); i++) {
   Element elment =(Element)nodeList.item(i);
   String str = elment.getElementsByTagName("姓名").item(0).getFirstChild().getNodeValue();
   System.out.println("姓名:"+str);
   str = elment.getElementsByTagName("性别").item(0).getFirstChild().getNodeValue();
   System.out.println("性别:"+str);
   str = elment.getElementsByTagName("年龄").item(0).getFirstChild().getNodeValue();
   System.out.println("年龄:"+str);
   System.out.println("-------------------------------------------------");
  }
  
  for (int i = 0; i < list.getLength(); i++) {
   Node node = list.item(i);
   System.out.println(node.getNodeType()+" : " + node.getNodeValue());
  }
  
 } 
}

2:解析任意的XML文件:

public class DomParseXml2 {

private static StringBuilder stringBuilder = new StringBuilder();

public static void main(String[] args) throws Exception {

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = dbf.newDocumentBuilder();
  Document doc = db.parse(new File("student.xml"));
  // 得到文档根元素
  Element element = doc.getDocumentElement();
  getChildren(element);
  System.out.println(stringBuilder);
 }

private static void getChildren(Element element) {
  stringBuilder.append("<"+element.getNodeName());
  NodeList nodeList = element.getChildNodes();
  NamedNodeMap map = element.getAttributes();
  //如果存在属性
  if (map != null) {
   for(int i=0;i<map.getLength();i++){
    Attr attr = (Attr)map.item(i);
    stringBuilder.append(" "+attr.getName()+"=\""+attr.getValue()+"\"");
   }
  }
  stringBuilder.append(">");
  
  
  if(nodeList!=null){
   for (int i = 0; i < nodeList.getLength(); i++) {
    Node node = nodeList.item(i);
    short type = node.getNodeType();
    if(type==Node.TEXT_NODE){
     stringBuilder.append(node.getNodeValue());
    }else if (type==Node.ELEMENT_NODE) {
     getChildren((Element)node);
    }else if (type==Node.COMMENT_NODE) {
     Comment comment = (Comment)node;
     stringBuilder.append("<!--"+comment.getData()+"-->");
    }
   }
  }
  stringBuilder.append("</"+element.getTagName()+">");
 }
}

SAX解析,基于事件:
1:

public class SAXParseXML {

public static void main(String[] args) throws Exception {
  SAXParserFactory factory = SAXParserFactory.newInstance();
  SAXParser parser = factory.newSAXParser();
  parser.parse(new File("student.xml"),new MyHandler());
 }
}

class MyHandler extends DefaultHandler{

@Override
 public void endDocument() throws SAXException {
  System.out.println("document end");
 }

@Override
 public void endElement(String uri, String localName, String name)
   throws SAXException {
  System.out.println("element end");
 }

@Override
 public void startDocument() throws SAXException {
  System.out.println("document start");
 }

@Override
 public void startElement(String uri, String localName, String name,
   Attributes attributes) throws SAXException {
  System.out.println("element start");
 }
}
2:

public class SAXParseXML2 {
 public static void main(String[] args) throws Exception {
  SAXParserFactory factory = SAXParserFactory.newInstance();
  SAXParser parser = factory.newSAXParser();
  parser.parse(new File("student.xml"), new MyHandler2());
 }
}
class MyHandler2 extends DefaultHandler {

private Stack<String> stack = new Stack<String>();
 private String name;
 private String age;
 private String gender;

@Override
 public void endElement(String uri, String localName, String qName)
   throws SAXException {
  stack.pop();
  if("学生".equals(qName)){
   System.out.println("姓名"+"="+name);
   System.out.println("年龄"+"="+age);
   System.out.println("性别"+"="+gender);
   System.out.println();
  }
 }

@Override
 public void startElement(String uri, String localName, String name,
   Attributes attributes) throws SAXException {
  stack.push(name);
  for (int i = 0; i < attributes.getLength(); i++) {
   String qName = attributes.getQName(i);
   String value = attributes.getValue(i);
   System.out.println(qName + "=" + value);
  }
 }
 @Override
 public void characters(char[] ch, int start, int length)
   throws SAXException {
  String tag = stack.peek();
  if ("性别".equals(tag)) {
   gender = new String(ch, start, length);
  }
  if ("姓名".equals(tag)) {
   name = new String(ch, start, length);
  }
  if ("年龄".equals(tag)) {
   age = new String(ch, start, length);
  }
 }
}

Jdom:

public class JdomTest1 {

public static void main(String[] args) throws Exception {
  Document document  = new Document();
  Element root = new Element("root");
  root.addContent(new Comment("this is my comment!"));
  document.setRootElement(root);
  
  Element people = new Element("person");
  people.setAttribute(new Attribute("number","1"));
  Element element1 = new Element("name");
  element1.setText("zhangsan");
  Element element2 = new Element("age");
  element2.setText("12");
  Element element3 = new Element("birthday");
  element3.setText("2011-11-11");
  
  Element element4 = new Element("address");
  element4.addContent(new Element("country").setText("China"));
  element4.addContent(new Element("city").setText("nanchang"));
  element4.addContent(new Element("street").setText("bayiguangchang"));
  people.addContent(element1).addContent(element2).addContent(element3).addContent(element4);
  root.addContent(people);
 
  Format format = Format.getPrettyFormat();
  format.setIndent("    ");
  XMLOutputter outputter = new XMLOutputter(format);
  outputter.output(document,new FileOutputStream("jdom.xml"));
 }
}

2:

public class JdomTest2 {

public static void main(String[] args) throws Exception {
  SAXBuilder builder = new SAXBuilder();
  Document document = builder.build(new File("jdom.xml"));
  Element root = document.getRootElement();
  
  System.out.println("root: "+root.getName());
  List list =  root.getChildren();
  for (int i = 0; i < list.size(); i++) {
   Element element = (Element)list.get(i);
   System.out.println(element.getName());
  }
  List<Attribute> attrs =  attrs = root.getChild("person").getAttributes();
  for(Attribute attr : attrs){
   System.out.println(attr.getName()+"="+attr.getValue());
  }
  
  Element element = root.getChild("person").getChild("address");
  element.removeContent();
  element.addContent("China");
  
  
  XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat().setIndent("    "));
  outputter.output(document,new FileOutputStream("jdom2.xml"));
  
 }
}

3:

package cn.huaxia.xml.jdom;

import java.io.FileWriter;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class JdomTest3 {
 public static void main(String[] args) throws Exception
 {
  Document document = new Document();

Element root = new Element("联系人列表").setAttribute(new Attribute("公司",
    "A集团"));

document.addContent(root);
  
  Element contactPerson = new Element("联系人");
  
  root.addContent(contactPerson);

contactPerson
    .addContent(new Element("姓名").setText("张三"))
    .addContent(new Element("公司").setText("A公司"))
    .addContent(new Element("电话").setText("021-55556666"))
    .addContent(
      new Element("地址")
        .addContent(new Element("街道").setText("5街"))
        .addContent(new Element("城市").setText("上海"))
        .addContent(new Element("省份").setText("上海市")));
  XMLOutputter output = new XMLOutputter(Format.getPrettyFormat()
    .setIndent("    ").setEncoding("gbk"));

output.output(document, new FileWriter("contact.xml"));

}
}

Dom4J:

1:

public class Dom4JTest {

public static void main(String[] args) throws Exception {
  Document document = DocumentHelper.createDocument();
  Element element = DocumentHelper.createElement("root");
  document.setRootElement(element);
  Element element2 = element.addElement("student");
  Element element3 = element2.addElement("name");
  Element element4 = element2.addElement("age");
  Element element5 = element2.addElement("sex");

element3.setText("johnny");
  element4.setText("11");
  element5.setText("男");

OutputFormat format = new OutputFormat("  ", true, "UTF-8");
  XMLWriter writer = new XMLWriter(format);
  writer.write(document);

XMLWriter writer2 = new XMLWriter(new FileOutputStream("student2.xml"),
    format);
  writer2.write(document);

OutputStreamWriter fileWriter = new OutputStreamWriter(new FileOutputStream(
    "student3.xml"), "utf-8");
  System.out.println(fileWriter.getEncoding());
  XMLWriter writer3 = new XMLWriter(fileWriter, format);
  writer3.write(document);
  writer3.flush();
  //writer3.close();

}
}

2:

public class Dom4JTest2 {

public static void main(String[] args) throws Exception {
  System.out.println("---------------SAXReader----------------------");
  SAXReader saxReader = new SAXReader();
  Document document = saxReader.read(new File("student2.xml"));

Element element = document.getRootElement();
  System.out.println("root element name: " + element.getName());

List<Element> list = element.elements();
  System.out.println(list.size());

for (Iterator iterator = element.elementIterator(); iterator.hasNext();) {
   Element element2 = (Element) iterator.next();
   System.out.println(element2.getName());
  }

Element element3 = element.element("student");
  List<Element> sunElement = element3.elements();
  for (Element element2 : sunElement) {
   System.err.println(element2.getName() + " : " + element2.getText());
  }

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
    .newInstance();
  DocumentBuilder documentBuilder = documentBuilderFactory
    .newDocumentBuilder();
  org.w3c.dom.Document document2 = documentBuilder.parse(new File(
    "student.xml"));
  System.out.println("---------------DOMReader----------------------");
  DOMReader domReader = new DOMReader();
  Document document3 = domReader.read(document2);
  Element rootElement = document3.getRootElement();
  System.out.println(rootElement.getName());

}
}

XML解析方式汇总的更多相关文章

  1. xml解析方式之JAXP解析入门

    XML解析 1 引入 xml文件除了给开发者看,更多的情况使用[程序读取xml文件]的内容.这叫做xml解析 2 XML解析方式(原理不同) DOM解析 SAX解析 3 XML解析工具 DOM解析原理 ...

  2. XML解析方式有哪些?

    1.DOM:要求解析器吧整个XML文档装载到内存,并解析成一个Document对象. (1).优点:元素与元素之间保留结构关系,故可以进行增删改查操作. (2).缺点:XML文档过大,可能出现内存溢出 ...

  3. Android中的三种XML解析方式

    在Android中提供了三种解析XML的方式:SAX(Simple API XML),DOM(Document Objrect Model),以及Android推荐的Pull解析方式.下面就对三种解析 ...

  4. XML解析方式

    两种解析方式概述 dom解析 (1)是W3C组织推荐的处理XML的一种解析方式. (2)将整个XML文档使用类似树的结构保存在内存中,在对其进行操作. (3)可以方便的对XML进行增删改查的操作 (4 ...

  5. java xml解析方式(DOM、SAX、JDOM、DOM4J)

    XML值可扩展标记语言,是用来传输和存储数据的. XMl的特定: XMl文档必须包含根元素.该元素是所有其他元素的父元素.XML文档中的元素形成了一颗文档树,树中的每个元素都可存在子元素. 所有XML ...

  6. XML解析方式与解析工具

    DOM解析原理: 1)JAXP (oracle-Sun公司官方) 2)JDOM工具(非官方) 3)Dom4J工具(非官方) 三大框架(默认读取xml的工具就是Dom4j) ....... SAX解析原 ...

  7. 带URL的XML解析方式

    XmlDocument xml = new XmlDocument(); xml.LoadXml(responseString); XmlNode root = xml.DocumentElement ...

  8. Json解析方式汇总 excel vba

    一. 这种方式比较复杂,因为office版本的原因,所以要加其它函数 Private Function parseScript(strJson As String) Dim objJson As Ob ...

  9. iOS - 分析JSON、XML的区别和解析方式的底层是如何实现的(延伸实现原理)

    <分析JSON.XML的区别,JSON.XML解析方式的底层是如何实现的(延伸实现原理)> (一)JSON与XML的区别: (1)可读性方面:基本相同,XML的可读性比较好: (2)可扩展 ...

随机推荐

  1. [转]TOpenDialog

    转自:http://www.cnblogs.com/zhangzhifeng/archive/2011/08/04/2127395.html 1.TOpenDialog组件的典型用法“打开”对话框是用 ...

  2. 集训第五周动态规划 I题 记忆化搜索

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  3. UVA 213 信息解码(二进制&位运算)

    题意: 出自刘汝佳算法竞赛入门经典第四章. 考虑下面的01串序列: 0, 00, 01, 10, 000, 001, 010, 011, 100, 101, 110, 0000, 0001, …, 1 ...

  4. linux 下CPU数量、核心数量、是否支持超线程的判断

    判断依据:1.具有相同core id的cpu是同一个core的超线程.2.具有相同physical id的cpu是同一颗cpu封装的线程或者cores. 英文版:1.Physical id and c ...

  5. hihoCoder 必须吐槽hihoCoder的一点 (¯Д¯)ノ

    代码输入窗口太小,mac下经常误操作:双指滑动浏览器后退 而且输入框不会自动保存,一不小心后退一下,啥都..都没了...码了好久的代码就没了..遇到不止一次了 (  ̄ .  ̄ ) (゜ ロ゜;) ( ̄ ...

  6. URAL 1297 求最长回文字符串

    有种简单的方法,数组从左到右扫一遍,每次以当前的点为中心,只要左右相等就往左右走,这算出来的回文字符串是奇数长度的 还有偶数长度的回文字符串就是以当前扫到的点和它左边的点作为中心,然后往左右扫 这是O ...

  7. key通用操作【九】

    一.概述: 在该系列的前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String.List.Set.Hashes和Sorted-Set.这些命令都具有一个共同点,即所有的操作都是针对与K ...

  8. Codeforces 628F Bear and Fair Set

    题意: 给定若干个上限upto以及集合中在[1,upto]中的元素个数,问是否存在这样的集合使得集合中的元素除以5的余数的个数相等. 分析: 首先可以想到区间的数与其除以5的余数和区间编号分别一一对应 ...

  9. 在Windows下搭建RocketMQ

    原文:http://blog.csdn.net/u014134180/article/details/51790988 目录 目录 一 准备工作 1 RocketMQ部署架构1 2 环境配置 二 安装 ...

  10. C# 图片识别(支持21种语言)转

    来自:http://www.cnblogs.com/stone_w/archive/2011/10/08/2202397.html 图片识别的技术到几天已经很成熟了,只是相关的资料很少,为了方便在此汇 ...