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

来源:互联网 发布:淘宝店铺音乐怎么修改 编辑:程序博客网 时间:2024/06/10 03:52

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

.


0 0