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
.