DOM解析XML

XML 结构是一种树型结构,处理步骤都差不多,Java 己经将它们封装成了现成的类库。目前流行的解析方法有三种,分别为 DOM、SAS 和 DOM4j。

DOM(Document Object Model,文档对象模型)

是 W3C 组织推荐的处理 XML 的一种方式。它是一种基于对象的 API,把 XML 的内容加载到内存中,生成一个 XML 文档相对应的对象模型,根据对象模型,以树节点的方式对文档进行操作。下面用实例说明解析步骤。

【例 1】DOM 解析 XML 文件。

假设 user.xml 文件如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <users>
  3. <user country="中国">
  4. <name>白真</name>
  5. <english_name>baizhen</english_name>
  6. <age>32</age>
  7. <sex>男</sex>
  8. <address state="北京">
  9. <city>北京市</city>
  10. <area>朝阳区</area>
  11. </address>
  12. <description>他是一个大学老师</description>
  13. </user>
  14. <user country="中国">
  15. <name>李华华</name>
  16. <english_name>lihuahua</english_name>
  17. <age>30</age>
  18. <sex>女</sex>
  19. <address state="河北省">
  20. <city>石家庄市</city>
  21. <area>裕华区</area>
  22. </address>
  23. <description>她是一个律师</description>
  24. </user>
  25. </users>

编写解析类 JAXBDomDemo.java 的代码如下:

  1. package com.eshore;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import javax.xml.parsers.DocumentBuilder;
  5. import javax.xml.parsers.DocumentBuilderFactory;
  6. import javax.xml.parsers.ParserConfigurationException;
  7. import org.w3c.dom.Document;
  8. import org.w3c.dom.Element;
  9. import org.w3c.dom.Node;
  10. import org.w3c.dom.NodeList;
  11. import org.xml.sax.SAXException;
  12. public class JAXBDomDemo
  13. {
  14. /**
  15. *用dom解析XML文件
  16. */
  17. public static void main(String[] args)
  18. {
  19. //创建待解析的XML文件,并指定目标
  20. File file=new File("F:\\users.xml");
  21. //用单例模式创建DocumentBuilderFactory对象
  22. DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
  23. //声明一个DocumentBuilder对象
  24. DocumentBuilder documentBuilder =null;
  25. try
  26. {
  27. //通过DocumentBuilderFactory构建DocumentBuilder对象
  28. documentBuilder=factory.newDocumentBuilder();
  29. //DocumentBuilder解析xml文件
  30. Document document=documentBuilder.parse(file);
  31. //获得xml文档中的元素根元素
  32. Element root=document.getDocumentElement();
  33. //输出根元素的名称
  34. System.out.println("根元素:"+root.getNodeName());
  35. //获得根元素下的子节点
  36. NodeList childNodes = root.getChildNodes();
  37. //遍历根元素下的子节点
  38. for(int i=0;i<childNodes.getLength();i++)
  39. {
  40. //获得根元素下的子节点
  41. Node node=childNodes.item(i);
  42. System.out.println("节点的名称为"+node.getNodeName());
  43. //获得子节点的country属性值
  44. String attributeV=node.getAttributes().getNamedItem("country").getNodeValue();
  45. System.out.println(node.getNodeName()+"节点的country属性值为"+attributeV);
  46. //获得node子节点下集合
  47. NodeList nodeChilds=node.getChildNodes();
  48. //遍历node子节点下集合
  49. for(int j=0;j<nodeChilds.getLength();j++)
  50. {
  51. Node details=nodeChilds.item(j);
  52. String name=details.getNodeName();
  53. //判断如果是address元素,获取子节点
  54. if("address".equals(name))
  55. {
  56. NodeList addressNodes=details.getChildNodes();
  57. //遍历address元素子节点
  58. for(int k=0;k<addressNodes.getLength();k++)
  59. {
  60. Node addressDetail=addressNodes.item(k);
  61. System.out.println(node.getNodeName()+"节点的子节点"+name+"点的子节点"+
  62. addressDetail.getNodeName()+" 节点内容为:"+addressDetail.getTextContent());
  63. }
  64. String addressAtt=details.getAttributes().getNamedItem("state").getNodeValue();
  65. System.out.println(name+"节点的state属性值为"+addressAtt);
  66. }
  67. System.out.println(node.getNodeName()+"节点的子节点"+details.getNodeName()+
  68. "节点的内容为:"+details.getTextContent());
  69. }
  70. }
  71. }
  72. catch(ParserConfigurationException e)
  73. {
  74. e.printStackTrace();
  75. }
  76. catch (IOException e)
  77. {
  78. e.printStackTrace();
  79. }
  80. catch (SAXException e)
  81. {
  82. e.printStackTrace();
  83. }
  84. }
  85. }

上述代码详细地描述了解析步骤。通过上述代码,不难发现 DOM 解析 XML 时,主要有以下几步:

  • 创建 DocumentBuilderFactory 对象:

//用单例模式创建DocumentBuilderFactory对象
DocumentBuilderFactory factory=DocumentBuilderFactory.newlnstance();

  • 通过 DocumentBuilderFactory 构建 DocumentBuilder 对象:

DocumentBuilder documentBuilder=factory.newDocumentBuilder();

  • DocumentBuilder 解析 xml 文件变为 Document 对象:

Document document=documentBuilder.parse(file);

取得 Document 对象之后就可以用 Document 中的方法获取 XML 数据了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧浩海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值