加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML解析,dom解析,Jdom解析

发布时间:2020-12-16 05:56:07 所属栏目:百科 来源:网络整理
导读:XML是一门标记语言,主要作用是用来进行数据传输和配置保存的。XML文件内容主要由两部分组成:头信息,主体信息 头信息: 主要放入的是一些配置信息,例如:版本,编码,规则(dtd,xsd),导入样式文件(CSS,XSL) 主体信息里主要放入具体要说明的数据。

XML是一门标记语言,主要作用是用来进行数据传输和配置保存的。XML文件内容主要由两部分组成:头信息,主体信息

头信息:
主要放入的是一些配置信息,例如:版本,编码,规则(dtd,xsd),导入样式文件(CSS,XSL)

主体信息里主要放入具体要说明的数据。

主体信息的组成:
1) 全部由节点(Node)组成,分为三类,节点都有两个固定的属性,Name,Value

a) 元素节点(Element),标签,只有name

b) 属性节点(Attribute),必须依附于元素节点存在,name和value同时存在

c) 文本节点(Text),具体的数据内容。只有value

2) 在这些节点之间存在关系:父子关系

a) 一个节点最多只能有一个父节点

b) 如果一个节点没有父节点,那么该节点称为根节点(Root)

c) 一个XML中只允许存在一个根节点

d) 只有元素节点可以有子节点,文本节点没有子节点,因此文本节点也称为叶子节点(Leaf)

如果想通过程序创建或读取XML文件,一般都使用一些解析工具完成,常用的解析方式有三种:

1) DOM解析:由w3c官方提供,所有语言都支持这种解析,解析方式是将整个文件读取到内存里,形成树型结构进行解析,代码清晰,但如果XML文件过大,会对内存造成压力。

DOM解析一般使用的Java语言,主要是用来完成XML的创建工作,通过查询到的数据库数据,建立一个XML文件,将文件传递给JavaScript。

public static void createXML(String savePath) throws Exception {
  List<City> allCities = new ArrayList<City>();
  City c = new City();
  c.setId(1);
  c.setTitle("南通");
  allCities.add(c);
  c = new City();
  c.setId(2);
  c.setTitle("南京");
  allCities.add(c);
  c = new City();
  c.setId(3);
  c.setTitle("杭州");
  allCities.add(c);

  // 建立Document核心操作对象
  Document document = new Document();
  // 建立根节点
  Element root = new Element("allCity");

  // 循环
  Iterator<City> iter = allCities.iterator();
  while (iter.hasNext()) {
   c = iter.next();

   // 建立所有元素节点
   Element cityElement = new Element("city");
   Element idElement = new Element("id");
   Element titleElement = new Element("title");

   // 配置关系
   idElement.addContent(c.getId().toString());
   titleElement.addContent(c.getTitle());
   cityElement.addContent(idElement);
   cityElement.addContent(titleElement);
   root.addContent(cityElement);
  }
  // 设置根节点
  document.setRootElement(root);

  // 导出
  XMLOutputter outputer = new XMLOutputter();
  // 设置编码
  outputer.setEncoding("UTF-8");

  outputer.output(document,new FileWriter(new File(savePath)));
 }

 public static void main(String[] args) throws Exception {
  createXML("D:/jdom.xml");
 }



2) SAX解析:由SUN官方提供,特点是逐行解析,需要自行编写解析规则,思路很混乱,基本不推荐使用,优点是不会造成太大的内存压力。

3) 第三方提供的解析工具:结合SAX和DOM的优点,并将代码风格改为Java的风格,简化开发。典型的第三方解析工具是:JDOM,dom4j

public static void createXML(String savePath) throws Exception {
  // 这里准备一个假的List集合,保存着所有数据库中查询到的数据
  List<City> allCities = new ArrayList<City>();
  City c = new City();
  c.setId(1);
  c.setTitle("南通");
  allCities.add(c);
  c = new City();
  c.setId(2);
  c.setTitle("南京");
  allCities.add(c);
  c = new City();
  c.setId(3);
  c.setTitle("杭州");
  allCities.add(c);

  // 开始进行创建,也需要核心对象
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = factory.newDocumentBuilder();
  Document document = builder.newDocument();

  // 通过document可以建立各种类型的节点。
  // 先建立根节点
  Element root = document.createElement("allCity");
  // 里面循环建立多个元素节点
  Iterator<City> iter = allCities.iterator();
  while (iter.hasNext()) {
   c = iter.next();

   // 元素节点
   Element cityElement = document.createElement("city");
   Element idElement = document.createElement("id");
   Element titleElement = document.createElement("title");

   // 建立文本节点
   Text idText = document.createTextNode(c.getId().toString());
   Text titleText = document.createTextNode(c.getTitle());

   // 设置各个节点间的关系
   idElement.appendChild(idText);
   titleElement.appendChild(titleText);
   cityElement.appendChild(idElement);
   cityElement.appendChild(titleElement);
   root.appendChild(cityElement);
  }
  // 将root设置为根节点
  document.appendChild(root);

  // 还要完成输出操作,需要通过其他的类来完成
  TransformerFactory tf = TransformerFactory.newInstance();
  Transformer t = tf.newTransformer();

  // 建立要导出的源对象
  Source s = new DOMSource(document);
  // 导出的位置
  StreamResult result = new StreamResult(new File(savePath));

  // 可以手工设置编码,默认使用当前项目的UTF-8编码
  t.setOutputProperty("encoding","UTF-8");

  // 进行导出
  t.transform(s,result);

 }

 public static void main(String[] args) throws Exception {
  // parseMappingXML("D:/News.hbm.xml");
  // parseWebXML("D:/web.xml");
  createXML("D:/dom.xml");
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读