如何用Documen查询(获取)XML文件的信息

XML文件Contact.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--  <!DOCTYPE contact SYSTEM "Contact.dtd">--><!-- <!DOCTYPE contact SYSTEM "dtd文件的路径"> 
<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
引入公共的DTD:
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
文档根结点 指的是当前xml中的根标签。
PUBLIC  表示当前引入的DTD是公共的DTD
--><contact xmlns="www.520xlh.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="www.520xlh.com Contact.xsd  ">   
	<linkman id="i1">
		<name>张三</name>
		<email>123@163.qq</email>
		<address>陕西省西安市</address>
		<school>西北大学</school>
	</linkman>
	<linkman id="i2">
		<name>李四</name>
		<email>xlh520@163.com</email>
		<address>陕西西安市</address>
		<school>西安电子科技大学</school>
	</linkman>
</contact>

需求:

在这里插入图片描述

实现代码一:

需要导入的包:有些包在此功能中用不到。

import static org.junit.Assert.*;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.junit.Assert;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@Test
	public void test2() throws Exception {
		//1.
		File file=new File("E:\\newjavacode\\XMLandDOM\\src\\Dom\\Contact.xml");
		DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
		DocumentBuilder builder=factory.newDocumentBuilder();
		Document document=builder.parse(file);//获得整个文档的doc对象,注意导入的包是w3c下的包
		//Element ele=document.getElementById("i1");
		//具有名称 "ID" 或 "id" 的属性不属于类型 ID,除非这样定义... 此方法行不通
		//Assert.assertEquals("哈哈,你失败啦!", null, ele);
		//2.
		Element root = document.getDocumentElement();//拿到contact元素对象
		/*NodeList childNodes = ele.getChildNodes();
		int length = childNodes.getLength();
		System.out.println(length);
		此方法返回的结点包括换行符号
		*/
		//3.
		//在当前元素位置下下找到指定名字的儿子元素
		NodeList linkmanlist = root.getElementsByTagName("linkman");
		//System.out.println(linkmanlist.getLength());
		Element linkman2 = (Element) linkmanlist.item(1);
		//4.获取linmanlist下的第二个元素name
		/*
		 * Element接口下的getElementsByTagName
		 * 在整个指定元素element中获取指定名称的元素
		 */
		Element name2=(Element) linkman2.getElementsByTagName("name").item(0);
		//5.
		String name2textContent = name2.getTextContent();
		assertEquals("哈哈,你猜错啦", "李四", name2textContent);//判断结果
	}

实现代码二:

此方法直接用的是document接口下的getgetElementsByTagName()方法,直接可以在全xml文档类根据doc对象直接获得元素name对象,所以比较代码比较简洁。

//3.需求2.:获取第二个linkman的name的值 
	@Test
	public void test3() throws Exception {
		File file=new File("E:\\newjavacode\\XMLandDOM\\src\\Dom\\Contact.xml");
		DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
		DocumentBuilder builder=factory.newDocumentBuilder();
		Document document=builder.parse(file);//获得整个文档的doc对象,注意导入的包是w3c下的包
		NodeList names = document.getElementsByTagName("name");//
		/*
		 * Document接口下的getElementsByTagName
		 * 在整个文档中获取指定名称的元素
		 */
		Node name2 = names.item(1);
		String textContent = name2.getTextContent();
		assertEquals("哈哈,你猜错啦", "李四", textContent);//判断结果
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值