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

分手后的思念是犯贱 2022-02-02 06:53 228阅读 0赞

XML文件Contact.xml

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

需求:

在这里插入图片描述

实现代码一:

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

  1. import static org.junit.Assert.*;
  2. import java.io.File;
  3. import javax.xml.parsers.DocumentBuilder;
  4. import javax.xml.parsers.DocumentBuilderFactory;
  5. import javax.xml.transform.Result;
  6. import javax.xml.transform.Source;
  7. import javax.xml.transform.Transformer;
  8. import javax.xml.transform.TransformerFactory;
  9. import javax.xml.transform.dom.DOMSource;
  10. import javax.xml.transform.stream.StreamResult;
  11. import org.junit.Assert;
  12. import org.junit.Test;
  13. import org.w3c.dom.Document;
  14. import org.w3c.dom.Element;
  15. import org.w3c.dom.Node;
  16. import org.w3c.dom.NodeList;
  17. @Test
  18. public void test2() throws Exception {
  19. //1.
  20. File file=new File("E:\\newjavacode\\XMLandDOM\\src\\Dom\\Contact.xml");
  21. DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
  22. DocumentBuilder builder=factory.newDocumentBuilder();
  23. Document document=builder.parse(file);//获得整个文档的doc对象,注意导入的包是w3c下的包
  24. //Element ele=document.getElementById("i1");
  25. //具有名称 "ID" 或 "id" 的属性不属于类型 ID,除非这样定义... 此方法行不通
  26. //Assert.assertEquals("哈哈,你失败啦!", null, ele);
  27. //2.
  28. Element root = document.getDocumentElement();//拿到contact元素对象
  29. /*NodeList childNodes = ele.getChildNodes(); int length = childNodes.getLength(); System.out.println(length); 此方法返回的结点包括换行符号 */
  30. //3.
  31. //在当前元素位置下下找到指定名字的儿子元素
  32. NodeList linkmanlist = root.getElementsByTagName("linkman");
  33. //System.out.println(linkmanlist.getLength());
  34. Element linkman2 = (Element) linkmanlist.item(1);
  35. //4.获取linmanlist下的第二个元素name
  36. /* * Element接口下的getElementsByTagName * 在整个指定元素element中获取指定名称的元素 */
  37. Element name2=(Element) linkman2.getElementsByTagName("name").item(0);
  38. //5.
  39. String name2textContent = name2.getTextContent();
  40. assertEquals("哈哈,你猜错啦", "李四", name2textContent);//判断结果
  41. }

实现代码二:

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

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

发表评论

表情:
评论列表 (有 0 条评论,228人围观)

还没有评论,来说两句吧...

相关阅读