JavaDemo——使用w3c.dom操作xml

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值