Using DOM parsing XML document

Assumed that we have an XML document named student. Now we will have some operation.Including add,drop and select.


xmlDemo.java

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

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.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class xmlDemo {

	/**
	 * @param args
	 * @throws ParserConfigurationException
	 * @throws IOException
	 * @throws SAXException
	 * @throws TransformerException
	 */
	public static void main(String[] args) throws ParserConfigurationException,
			SAXException, IOException, TransformerException {

		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();

		// Gets the document object.
		Document document = builder.parse(new File("student.xml"));

		while (true) {
			System.out.println("请输入数字:1(第一题),2,3,4");

			Scanner s = new Scanner(System.in);
			switch (s.nextInt()) {
			case 1:// 1.Deletes students Lin Qingxia.
				deleteElement(document);
				break;
			case 2: // 2.Adds students angelbaby
				addElement(document);
				break;

			case 3: // 3.Outputs the sex value of Huang Xiaoming.
				getH(document);
				break;

			case 4: // 4.Outputs the introduction of Zhou Xingchi.
				getZ(document);
				break;
			default:
				System.out.println("有误 ,重输");

			}
		}
	}

	/**
	 * Deletes element from the specified file.
	 * 
	 * @param document
	 * @throws TransformerException
	 */
	private static void deleteElement(Document document)
			throws TransformerException {

		int length = document.getElementsByTagName("名字").getLength();
		int j = 0;
		for (int i = 0; i < length; i++, j++) {

			Element e = (Element) document.getElementsByTagName("名字").item(j);

			if (e.getTextContent().equals("林青霞")) {
				e.getParentNode().getParentNode()
						.removeChild(e.getParentNode());
				j--;
			}
		}

		TransformerFactory fac = TransformerFactory.newInstance();
		Transformer tf = fac.newTransformer();
		tf.transform(new DOMSource(document), new StreamResult("student.xml"));

	}

	private static void addElement(Document document)
			throws TransformerException {
		Element e = document.createElement("学生");
		Element e1 = document.createElement("姓名");
		Element e2 = document.createElement("年龄");
		Element e3 = document.createElement("介绍");
		document.getElementsByTagName("班级").item(0).appendChild(e);

		e1.setTextContent("angelbaby");
		e2.setTextContent("22");
		e3.setTextContent("热情爱生活");
		e.appendChild(e1);
		e.appendChild(e2);
		e.appendChild(e3);
		TransformerFactory fac = TransformerFactory.newInstance();
		Transformer tf = fac.newTransformer();
		tf.transform(new DOMSource(document), new StreamResult("student.xml"));

	}

	private static void getH(Document document) {
		for (int i = 0; i < document.getElementsByTagName("名字").getLength(); i++) {
			Element n = (Element) document.getElementsByTagName("名字").item(i);
			if (n.getTextContent().equals("黄晓明")) {
				Node node = n.getParentNode().getAttributes()
						.getNamedItem("sex");
				System.out.println(node.getNodeValue());
				return;
			}
		}

	}

	private static void getZ(Document document) {
		for (int i = 0; i < document.getElementsByTagName("名字").getLength(); i++) {

			Node node;

			if ((node = document.getElementsByTagName("名字").item(i))
					.getTextContent().equals("周星驰")) {

				NodeList list = node.getParentNode().getChildNodes();
				for (int k = 0; k < list.getLength(); k++) {
					Node n = list.item(k);

					if (n.getNodeName().equals("介绍")) {

						System.out.println(n.getTextContent());

					}
				}
			}
		}
	}
}


student.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<班级>
	<学生 id="a01" sex="man">
		<名字>周星驰</名字>
		<年龄>23</年龄>
		<介绍>学习刻苦</介绍>
	</学生>

	<学生 id="a02">
		<名字>林青霞</名字>
		<年龄>32</年龄>
		<介绍>是一个好学生</介绍>
	</学生>

	<学生 id="004" sex="man">
		<名字>黄晓明</名字>
		<介绍>刻苦学习</介绍>
		<年龄>30</年龄>
	</学生>
</班级>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
从类中解析XML文档的方法有很多种,以下是其中一种常用的方法: 1. 使用Java自带的DOM解析DOM解析器是一种基于树形结构的解析器,可以将整个XML文档加载到内存中,然后通过节点的方式遍历整个文档。使用DOM解析器需要以下步骤: (1)创建DocumentBuilderFactory对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); (2)创建DocumentBuilder对象 DocumentBuilder builder = factory.newDocumentBuilder(); (3)解析XML文档 Document document = builder.parse(new File("xml文件路径")); (4)获取根节点 Element root = document.getDocumentElement(); (5)遍历节点 NodeList nodeList = root.getChildNodes(); for (int i = ; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; //获取节点的属性和值 String attribute = element.getAttribute("属性名"); String value = element.getTextContent(); } } 2. 使用Java自带的SAX解析器 SAX解析器是一种基于事件驱动的解析器,可以在解析XML文档的过程中触发一系列的事件,例如开始元素、结束元素、文本等。使用SAX解析器需要以下步骤: (1)创建SAXParserFactory对象 SAXParserFactory factory = SAXParserFactory.newInstance(); (2)创建SAXParser对象 SAXParser parser = factory.newSAXParser(); (3)创建自定义的Handler类 public class MyHandler extends DefaultHandler { public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //开始元素事件 } public void endElement(String uri, String localName, String qName) throws SAXException { //结束元素事件 } public void characters(char[] ch, int start, int length) throws SAXException { //文本事件 } } (4)解析XML文档 parser.parse(new File("xml文件路径"), new MyHandler()); 以上是两种常用的从类中解析XML文档的方法,具体使用哪种方法取决于具体的需求和场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值