demo:
用来读取的xml:
<?xml version="1.0" encoding="UTF-8"?>
<hello>
<world id="1">textnode1<name type="X">A</name>TEXTnode2
<size>111</size>
text3
</world>
<world id="2">
<name type="X">B</name>
<size>222</size>
</world>
<world id="3">
<name type="Y">C</name>
<size>333</size>
</world>
</hello>
java代码:
/**
* 2020年10月19日下午2:41:56
*/
package testw3cdom;
import java.io.File;
import java.io.IOException;
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.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
* @author XWF
*
*/
public class TestW3CDom {
/**
* @param args
*/
public static void main(String[] args) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
//读取xml
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("src/testw3cdom/testw3cdom.xml");
NodeList nodelist = doc.getElementsByTagName("world");
for(int i = 0; i < nodelist.getLength(); i++) {
Node node = nodelist.item(i);
System.out.println("====" + (node.getNodeType() == Node.ELEMENT_NODE));
Element element = (Element) node;
System.out.println("=" + element.getNodeName() + ",id=" + element.getAttribute("id"));
// NodeList chs = node.getChildNodes();
// for(int j = 0; j < chs.getLength(); j++) {
// Node chnode = chs.item(j);
// if(chnode.getNodeType() == Node.TEXT_NODE) {
// System.out.println("textnode:" + chnode.getNodeValue());
// }else if(chnode.getNodeType() == Node.ELEMENT_NODE) {
// System.out.println("elementnode:" + chnode.getNodeName());
// }
// }
for(Node next = node.getFirstChild(); next != null; next = next.getNextSibling()) {
if(next.getNodeType() == Node.TEXT_NODE) {
//两个标签之间的内容(上一个结束跟下一个开始标签之间,包括空白和回车)
System.out.println("textnode:" + next.getNodeValue());
}else if(next.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("elementnode:" + next.getNodeName());
if("name".equals(next.getNodeName())) {
Element nameElement = (Element) next;
System.out.println(String.format("<type:%s;val:%s>", nameElement.getAttribute("type"), nameElement.getTextContent()));
}else if("size".equals(next.getNodeName())) {
Element sizeElement = (Element) next;
System.out.println("_size=" + sizeElement.getTextContent());
}
}
}
}
//借助Transformer生成xml
Document newDoc = db.newDocument();
Element rootEle = newDoc.createElement("ElementRoot");
newDoc.appendChild(rootEle);
Element ele1 = newDoc.createElement("Element");
ele1.setAttribute("ID", "xxxx");
Element ele1_str = newDoc.createElement("hello");
ele1_str.setTextContent("HELLO内容");
ele1.appendChild(ele1_str);
rootEle.appendChild(ele1);
Element ele2 = newDoc.createElement("Element");
ele2.setAttribute("ID", "yyyy");
ele2.appendChild(newDoc.createTextNode("This is Text Node"));
rootEle.appendChild(ele2);
TransformerFactory factory = TransformerFactory.newInstance();
try {
Transformer transform = factory.newTransformer();
transform.setOutputProperty(OutputKeys.INDENT, "yes");//设置添加空白缩进排列
// transform.setOutputProperty(OutputKeys.ENCODING, "ASCII");
transform.transform(new DOMSource(newDoc), new StreamResult(new File("src/testw3cdom/testw3cdomnew.xml")));
} catch (TransformerException e) {
e.printStackTrace();
}
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
}
结果:
生成的xml: