JavaDemo——使用w3c.dom操作xml

it2023-06-02  63

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:

最新回复(0)