java xml 框架 dom4j 解析 xml 字符串 和 利用 dom4j 创建 XML 的方法

dom4j 是 java 下最常用的 xml 解析框架之一,其他还有 jdom、dom 都属于优秀的 xml 框架,这里就以 dom4j 为例,示范 xml 字符串的解析


这是代码中 XML 的结构,metaData 内有一个 array 结构,需要循环读取

<?xml version="1.0"?>
<item name="\"20160202014140_208_59400.jpg\"" id="\"9737853a-3cb8-48d5-a735-a75c3e8fa721\"" relativePath="\"user\\Obama\\20160202014140_208_59400.jpg\"">
    <fileInfo fileIndexed="\"2016-02-02" numPages="\"1\"" resolution="\"96\"" width="\"1600\"" height="\"1200\"" fileSize="\"202.42">
        <metaData>
            <item name="\"Width" value="\"1600\"" />
            <item name="\"Height" value="\"1200\"" />
            <item name="\"Resolution\"" value="\"96\"" />
        </metaData>
        <boxes />
    </fileInfo>
</item>


代码演示

package dom4j;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.io.SAXReader;
import org.dom4j.jaxb.JAXBReader;
import org.dom4j.Element;
import java.awt.Component;
import java.util.Iterator;

import java.util.List;

public class Test01
{

  public static void main(String[] args)
  {
    // xml 示範字符串
    String xml = "<item name=\"20160202014140_208_59400.jpg\" id=\"9737853a-3cb8-48d5-a735-a75c3e8fa721\" relativePath=\"user\\Obama\\20160202014140_208_59400.jpg\"><fileInfo fileIndexed=\"2016-02-02 01:41:32\" numPages=\"1\" resolution=\"96\" width=\"1600\" height=\"1200\" fileSize=\"202.42 Kb\"><metaData><item name=\"Width (px)\" value=\"1600\" /><item name=\"Height (px)\" value=\"1200\" /><item name=\"Resolution\" value=\"96\" /></metaData><boxes /></fileInfo></item>";
    
    try
    {
      // 載入 xml
      Document doc = DocumentHelper.parseText(xml);
      // 置 root
      Element element = doc.getRootElement();

      // node by root
      String name = element.attributeValue("name");
      String id = element.attributeValue("id");
      String relativePath = element.attributeValue("relativePath");

      System.out.println(name);
      System.out.println(id);
      System.out.println(relativePath);

      // node by /item/fileInfo
      element = element.element("fileInfo");

      String fileIndexed = element.attributeValue("fileIndexed");
      String numPages = element.attributeValue("numPages");
      String resolution = element.attributeValue("resolution");

      System.out.println(fileIndexed);
      System.out.println(numPages);
      System.out.println(resolution);

      // node by /item/fileInfo/metaData
      element = doc.getRootElement();
      element = element.element("fileInfo");
      element = element.element("metaData");
      Iterator it = element.elementIterator();

      // 遍歷 metaData 内的 item 并打印
      while (it.hasNext())
      {
        // 取得 item
        Element item = (Element) it.next();

        String n = item.attributeValue("name");
        String v = item.attributeValue("value");

        System.out.print(n);
        System.out.print(": ");
        System.out.println(v);
      }
    }
    catch (DocumentException e)
    {
      e.printStackTrace();
    }

  }

}


通过 dom4j 的解析,xml字符串显示结果如下:

20160202014140_208_59400.jpg
9737853a-3cb8-48d5-a735-a75c3e8fa721
user\Obama\20160202014140_208_59400.jpg
2016-02-02 01:41:32
1
96
Width (px): 1600
Height (px): 1200

Resolution: 96


创建 XML 代码如下:

package code02;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class MakeXML
{

  public static void main(String[] args)
  {
    // 创建 XML 对象
    Document doc = DocumentHelper.createDocument();
    // 设置编码
    doc.setXMLEncoding("utf-8");

    // 创建一个根节点
    Element root = doc.addElement("root");

    // 创建节点,添加属性,设置值
    Element elementA = root.addElement("elementA").addAttribute("color", "red");
    elementA.setText("this is red");
    Element elementB = root.addElement("elementB").addAttribute("color", "blue");
    elementA.setText("this is blue");

    // 创建节点,添加属性,设置值
    Element elementA1 = elementA.addElement("elementA1").addAttribute("color", "pink");
    elementA1.setText("this is pink");
    Element elementA2 = elementA.addElement("elementA2").addAttribute("color", "brown");
    elementA2.setText("this is brown");
    Element elementA3 = elementA.addElement("elementA3").addAttribute("color", "gray");
    elementA3.setText("this is gray");

    // 创建节点,添加属性,设置值
    Element elementB1 = elementB.addElement("elementB1").addAttribute("color", "green");
    Element elementB2 = elementB.addElement("elementB2").addAttribute("color", "orange");
    Element elementB3 = elementB.addElement("elementB3").addAttribute("color", "yellow");

    // 输出 XML
    String strXML = doc.asXML();
    System.out.println(strXML);
  }

}


输出结果:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <elementA color="red">this is blue
        <elementA1 color="pink">this is pink</elementA1>
        <elementA2 color="brown">this is brown</elementA2>
        <elementA3 color="gray">this is gray</elementA3>
    </elementA>
    <elementB color="blue">
        <elementB1 color="green"/>
        <elementB2 color="orange"/>
        <elementB3 color="yellow"/>
    </elementB>
</root>



dom4j 的下载地址:http://sourceforge.net/projects/dom4j/


Q群讨论 236201801

.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值