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);//判断结果
}