浏览 8948 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (1) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-02
最后修改:2009-11-16
以 DOM 方式创建XML文档,示例如下(标有详细注释) 注意下面的toXMLString 方法,如何将Document转化为XML字符串。
package Test_DOM; import java.io.ByteArrayOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Attr; import org.w3c.dom.Comment; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Test { public static void main(String[] args) throws ParserConfigurationException, TransformerException { DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = builderFactory.newDocumentBuilder(); //创建一个DOM文档 Document document = builder.newDocument(); //创建一个DOM带有命名空间的元素 Element books = document.createElementNS("http://test.org/books","books"); //为文档document添加子节点books document.appendChild(books); //创建一个命名空间属性 Attr ns = document.createAttributeNS("http://test.org", "count"); ns.setValue("1"); //创建一个注释节点 Comment comment = document.createComment("books's comment"); //创建一个元素节点 Element book = document.createElement("book"); //为元素节点books设置命名空间ns books.setAttributeNodeNS(ns); //为元素节点books添加子节点comment books.appendChild(comment); //为元素节点books添加子节点book books.appendChild(book); /* * 为元素节点book添加属性,等价于: * Attr bookId = document.createAttribute("id"); * bookId.setValue("1"); * book.setAttributeNode(bookId); */ book.setAttribute("id", "1"); //创建一个元素节点 Element bookname = document.createElement("name"); //为元素节点book添加子节点bookname book.appendChild(bookname); //创建一个文本节点,并添加到元素bookname中 bookname.appendChild(document.createTextNode("Thinking in JAVA")); //打印document节点 printNode(document,0); //将document节点输出为XML格式 System.out.println(toXMLString(document)); } /* * 打印 DOM 节点 * 输出格式为: * [nodeName,nodeValue] * attributeName=attributeValue * ... * [childNodeName,childNodeValue] * ... */ public static void printNode(Node node,int count){ if(node != null){ String tmp = ""; for(int i = 0 ; i < count ; i++) tmp += " "; System.out.println(tmp+node); /* * node.getAttributes()方法返回 * 包含node节点的属性的 NamedNodeMap(如果它是 Element) */ NamedNodeMap attrs = node.getAttributes(); if(attrs != null) for(int i = 0 ; i < attrs.getLength() ; i++){ printNode(attrs.item(i),count+1); } /* * node.getChildNodes()方法返回 * 包含node节点的所有子节点的 NodeList。 */ NodeList childNodes = node.getChildNodes(); for(int i = 0 ; i < childNodes.getLength() ; i++){ printNode(childNodes.item(i),count+1); } } } //返回文档Document的XML格式的字符串 public static String toXMLString(Document document) throws TransformerException{ /* * 创建一个DOM转换器 */ TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); /* * 设置输出属性 * encoding = "GB2312" 代表 输出的编码格式为 GB2312 * indent = "yes" 代表缩进输出 */ transformer.setOutputProperty(OutputKeys.ENCODING,"GB2312"); transformer.setOutputProperty(OutputKeys.INDENT,"yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); //transformer.transform()方法 将 XML Source转换为 Result transformer.transform(new DOMSource(document), new StreamResult(outputStream)); return outputStream.toString(); } } 运行结果如下:
[#document: null]
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-10-15
transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
好像对输也没有影响(jdk1.6) |
|
返回顶楼 | |
发表时间:2009-11-16
最后修改:2009-11-19
回复楼上: |
|
返回顶楼 | |
发表时间:2009-11-18
dom4j的实现方式:
OutputFormat format = OutputFormat.createPrettyPrint(); format.setIndent("\t"); format.setEncoding("UTF-8"); Document document = DocumentHelper.createDocument(); document.addElement(""); …… |
|
返回顶楼 | |