记录一下使用dom4j和jdom这两个API处理字符串型XML的方法,虽然网上也有很多这样的文章,但我还是想再写一遍,方便自己查找。
dom4j是1.6.1版本,jdom是1.1版,代码没什么技术含量,就是API的使用而已,所以没加注释。
import java.io.IOException;
import java.io.StringWriter;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class Dom4JHandle {
private static final String xmlString = "<books><book price=\"108\"><name>Java编程思想</name><author>Bruce Eckel</author></book><book price=\"52\"><name>Effective Java</name><author>Joshua Bloch</author></book><book price=\"118\"><name>Java 7入门经典</name><author>Ivor Horton</author></book></books>";
public static void main(String[] args) {
parseXml(xmlString);
assembleXml();
}
public static void parseXml(String xmlString) {
try {
Document doc = DocumentHelper.parseText(xmlString);
Element root = doc.getRootElement();
@SuppressWarnings("unchecked")
List<Element> elements = root.elements();
for(Element element : elements) {
System.out.println("name=" + element.elementText("name") + "\tauthor=" + element.elementText("author")
+ "\tprice=" + element.attributeValue("price"));
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static String assembleXml() {
Document doc = DocumentHelper.createDocument();
Element root = doc.addElement("books");
Element book = root.addElement("book");
book.addAttribute("price", "108");
book.addElement("name").setText("Java编程思想");
book.addElement("author").setText("Bruce Eckel");
book = root.addElement("book");
book.addAttribute("price", "52");
book.addElement("name").setText("Effective Java");
book.addElement("author").setText("Joshua Bloch");
book = root.addElement("book");
book.addAttribute("price", "118");
book.addElement("name").setText("Java 7入门经典");
book.addElement("author").setText("Ivor Horton");
OutputFormat format = OutputFormat.createCompactFormat(); //createPrettyPrint() 层次格式化
StringWriter writer = new StringWriter();
XMLWriter output = new XMLWriter(writer, format);
try {
output.write(doc);
writer.close();
output.close();
System.out.println(writer.toString());
} catch (IOException e) {
e.printStackTrace();
return null;
}
return writer.toString();
}
}
dom4j还可以配合xpath一起使用,一般来说用不上,不过xml比较复杂,而需求又比较特殊的时候就需要它来配合了,不过不用完全记住那些规则,可以去w3cschool网站在线查询:
http://www.w3school.com.cn/xpath/index.asp
import java.io.StringReader;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
public class JdomHandle {
private static final String xmlString = "<books><book price=\"108\"><name>Java编程思想</name><author>Bruce Eckel</author></book><book price=\"52\"><name>Effective Java</name><author>Joshua Bloch</author></book><book price=\"118\"><name>Java 7入门经典</name><author>Ivor Horton</author></book></books>";
public static void main(String[] args) {
parseXml(xmlString);
assembleXml();
}
public static void parseXml(String xmlString) {
SAXBuilder builder = new SAXBuilder();
Document doc = null;
try {
doc = builder.build(new StringReader(xmlString));
Element root = doc.getRootElement(); // 根元素
@SuppressWarnings("unchecked")
List<Element> list = root.getChildren();
if (list != null) {
for (Element element : list) {
System.out.println("name=" + element.getChildText("name") + "\tauthor="
+ element.getChildText("author") + "\tprice=" + element.getAttributeValue("price"));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static String assembleXml() {
Document doc = new Document();
Element root = new Element("books");
Element book = new Element("book");
Element name = new Element("name");
Element author = new Element("author");
book.setAttribute("price", "108");
name.addContent("Java编程思想");
author.addContent("Bruce Eckel");
book.addContent(name);
book.addContent(author);
root.addContent(book);
book = new Element("book");
name = new Element("name");
author = new Element("author");
book.setAttribute("price", "52");
name.addContent("Effective Java");
author.addContent("Joshua Bloch");
book.addContent(name);
book.addContent(author);
root.addContent(book);
book = new Element("book");
name = new Element("name");
author = new Element("author");
name.addContent("Java 7入门经典");
author.addContent("Ivor Horton");
book.setAttribute("price", "118");
book.addContent(name);
book.addContent(author);
root.addContent(book);
doc.addContent(root);
XMLOutputter xo = new XMLOutputter(Format.getCompactFormat()); // getPrettyFormat() 层次格式化
System.out.println(xo.outputString(doc));
return xo.outputString(doc);
}
}
分享到:
相关推荐
NULL 博文链接:https://dreams75.iteye.com/blog/512319
xml数据前后台解析;提供了两种方式:dom4j与jdom对xml文件、xml字符串的读与写操作;同时实现在前台用jquery解析xml,将数据展示在页面上,程序可以跑
Java解析XML的四种方法 1. DOM生成和解析XML文档 2. SAX生成和解析XML文档 3. DOM4J生成和解析XML文档 4. JDOM生成和解析XML
XML和JavaBean相互转化是一个非常有用的工作,用来读写xml的组件很多,比如dom4j, sax, JDom,Digester等,但是很多组件用起来很麻烦,今天给大家推荐一个超级简单的组件JOX, JOX是一套用户XML document和Java ...
#PCDATA 可解析字符串。 1)DTD的调用 方式一:调用内部文档类型定义。 <?xml version="1.0" standalone="yes"?> <!DOCTYPE studinfo[<!ELEMENT studinfo (#PCDATA)>]> 注意点: (1) studinfo与(#PCDATA)有...
Hibernate使用dom4j解析XML配置文件和XML映射元文件。必需的。 ehcache-1.2.jar Hibernate可以使用不同cache缓存工具作为二级缓存。EHCache是缺省的cache缓存工具。如果没有其它的可选缓存工具,则为必需的。 ...
DWR 自动将DOM、DOM4J、JDOM和XOM转换成DOM树,前面这几种类型都仅仅返回Document,Element,Node.DWR会自动将这些转换成浏览器DOM对象.通常在启动JDOM Converter时会有一个提示信息,除非你想采用JDOMconverter否则可以...
Hibernate使用dom4j解析XML配置文件和XML映射元文件。必需的。 ehcache-1.2.jar Hibernate可以使用不同cache缓存工具作为二级缓存。EHCache是缺省的cache缓存工具。如果没有其它的可选缓存工具,则为必需的。 ...
实例105 DOM4j解析XML文件 278 实例106 JDOM解析XML文件 285 实例107 DOM解析XML文件 292 实例108 SAX解析XML文件 297 实例109 W3C解析XML文件 301 第13章 Java网络编程 306 实例110 获取IP地址和域名 306 ...