java DOM 操作xml

时间:2023-03-09 16:33:39
java DOM 操作xml

1 代码如下:

 package dom.pasing;

 import java.io.IOException;
import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys;
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.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text; public class DOMTest { /**
*
* @return
*/
public static Document createDocument() { Document document = null; try {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
document = builder.newDocument();
Element root = document.createElement("students");
document.appendChild(root); /**
* <students>
* <student sn="01">
* <name>张三</name>
* <age>19</age>
* </student>
* </students>
*/
Element stuEle = document.createElement("student"); Attr attr = document.createAttribute("sn");
attr.setValue("01");
stuEle.setAttributeNode(attr); Element nameElem = document.createElement("name");
Text txtName = document.createTextNode("张三");
nameElem.appendChild(txtName);
stuEle.appendChild(nameElem); Element ageElem = document.createElement("age");
Text txtAge = document.createTextNode("19");
ageElem.appendChild(txtAge);
stuEle.appendChild(ageElem);
document.getDocumentElement().appendChild(stuEle); //在文档根元素节点studnets下,添加一个student元素节点 /**
* 创建节点
* <student>
* <name>李四</name>
* <age>24</age>
* </student>
*/
Element stuEle2 = document.createElement("student"); Attr attr2 = document.createAttribute("sn");
attr2.setValue("02");
stuEle2.setAttributeNode(attr2); Element nameEle2 = document.createElement("name");
Text txtName2 = document.createTextNode("李四");
nameEle2.appendChild(txtName2);
stuEle2.appendChild(nameEle2); Element ageEle2 = document.createElement("age");
Text txtAge2 = document.createTextNode("24");
ageEle2.appendChild(txtAge2);
stuEle2.appendChild(ageEle2);
document.getDocumentElement().appendChild(stuEle2); //在文档根元素节点studnets下,添加一个student元素节点
} catch (ParserConfigurationException e) {
e.printStackTrace();
} return document;
} public static void alterDocument(Document document) {
NodeList nodeList = document.getElementsByTagName("student");
Node node = nodeList.item(0);
node.getParentNode().removeChild(node); //移除第1个student元素节点
} /**
* 转换DOM为String
* @param document
* @return
* @throws TransformerException
*/
public static String documentToStr(Document document) { String result = null; try {
DOMSource source = new DOMSource(document);
StringWriter stringWriter = new StringWriter();
StreamResult streamResult = new StreamResult(stringWriter); TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //默认的缩进量长度为0
transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
transformer.transform(source, streamResult); result = stringWriter.toString();
} catch (TransformerException e) {
e.printStackTrace();
}
return result;
} /**
*
* @param document
* @return
*/
public static String documentToIndentStr(Document document) { String result = null; try { StringWriter stringWriter = new StringWriter(); OutputFormat format = new OutputFormat(document);
format.setLineWidth(100);
format.setIndenting(true);
format.setIndent(4); XMLSerializer serializer = new XMLSerializer(stringWriter, format);
serializer.serialize(document); result = stringWriter.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
} public static void main(String[] args) { String rslt = null; Document document = createDocument(); rslt = documentToIndentStr(document); System.out.println(rslt);
}
} 输出结果:

<?xml version="1.0" encoding="UTF-8"?>
<students>
  <student sn="01">
    <name>张三</name>
    <age>19</age>
  </student>
  <student sn="02">
    <name>李四</name>
    <age>24</age>
  </student>
</students>