DOM解析XML

DOM解析XML

先创建DocumentBuilderFactory对象利用newInstanse()方法
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
再创建DocumentBuilder对象
DocumentBuilder db = dbf.newDocumentBuilder();
通过DocumentBuilder对象的parse方法加载book.xml文件到当前目录项目下
Document document = db.parse(“books.xml”);

获取节点集合:
getElementsByTagName(String arg0)方法,返回值为NodeList 节点集合
NodeList booklist = document.getElementsByTagName(“book”);
获取节点集合长度:
getLength()
用循环遍历节点集合
Node book = booklist.item(i);//item(i) 方法获取其中的一个节点 返回值Node节点 nodelist的索引值从0开始
通过getAttributes获取book节点的所有属性集合 返回NameNodeMap - Node *
NamedNodeMap attrs = book.getAttributes();
attrs.getLength()获取属性个数
通过item(j)方法来获取book节点的某一属性
Node attr = attrs.item(j);
通过getNodeName获取属性名
通过getNodeValue获取属性值

前提:已经知道book节点属性,有且只能有一个id属性 如下:
节点属性及返回值

//将book节点进行强制转换成Element类型
Element book = (Element)booklist.item(i);

//通过Element的getAttribute(“id”)的方法获取属性值
String attrValue = book.getAttribute(“id”);

//通过getChildNodes获取book的子节点
NodeList childNodes = book.getChildNodes();

通过childNodes.item获取每个节点,再用getNodeName获取每个节点名
//前提通过getNodeType方法来获取节点类型是否为ELEMENT_NODE
if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {

childNodes.item(k).getNodeName());//getNodeName()获取节点名
//通过getFistChild获取ELEMENT子节点的子节点(TEXT_NODE),从而获取节点值
childNodes.item(k).getFirstChild().getNodeValue());

getTextContent() 获取节点中间的值 包括子节点的所有值
childNodes.item(k).getTextContent());

public static void main(String[] args) {
		//创建一个DocumentBuilderFactory对象
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
			//创建DocumentBuilder对象
			DocumentBuilder db = dbf.newDocumentBuilder();
			//通过DocumentBuilder对象的parse方法加载book.xml文件到当前目录项目下
			Document document = db.parse("books.xml");
			//获取book节点的集合
			NodeList booklist = document.getElementsByTagName("book");
			//通过nodelist的getLength()方法可以获取booklist的长度
			System.out.println("一共有"+booklist.getLength()+"本书");
			//遍历每一个book节点
			for(int i = 0; i < booklist.getLength(); i++) {
				System.out.println("================下面开始遍历第"+(i+1)+"本书的内容================");
				//通过item(i)方法来获取一个book节点, nodelist的索引值从0开始
//				Node book = booklist.item(i);
//				//通过getAttributes获取book节点的所有属性集合
//				NamedNodeMap attrs = book.getAttributes();
//				System.out.println("第"+(i+1)+"本书共有"+ attrs.getLength()+"个属性");
//				//通过for循环来遍历book节点属性集合
//				for(int j = 0; j < attrs.getLength(); j++) {
//					//通过item(j)方法来获取book节点的某一属性
//					Node attr = attrs.item(j);
//					//通过getNodeName获取属性名
//					System.out.print("属性名:"+attr.getNodeName());
//					//通过getNodeValue获取属性值
//					System.out.println("属性值:"+attr.getNodeValue());
//				}
				**//前提:已经知道book节点属性,有且只能有一个id属性**
				//将book节点进行强制转换成Element类型
				Element book = (Element)booklist.item(i);
				//通过Element的getAttribute("id")的方法获取属性值
				String attrValue = book.getAttribute("id");
				System.out.println("id属性的属性值为:"+attrValue);
				//通过getChildNodes获取book的子节点
				NodeList childNodes = book.getChildNodes();
				System.out.println("第"+(i+1)+"本书具有"+childNodes.getLength()+"个子节点!");
				for(int k=0; k<childNodes.getLength(); k++) {
					//通过childNodes.item获取每个节点,再用getNodeName获取每个节点名
					//前提通过getNodeType方法来获取节点类型是否为ELEMENT
					if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {
						System.out.print("第"+(k+1)+"个节点的节点名为:"+childNodes.item(k).getNodeName());
						//通过getFistChild获取ELEMENT子节点的子节点
						System.out.println("--节点值C:"+childNodes.item(k).getFirstChild().getNodeValue());
//						System.out.println("--节点值是:"+childNodes.item(k).getTextContent());
					}
				}
				System.out.println("================结束遍历第"+(i+1)+"本书的内容================");
			}
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值