为了账号安全,请及时绑定邮箱和手机立即绑定

使用DOM解析器解析XML文件 学习笔记

标签:
Java

  1. dom解析和dom4j原理一致

  2. Node是所有元素的父接口

  3. 常用的API:

  • DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();取得DOM解析器工厂

  • DocumentBuilder domParser = factory.newDocumentBuilder();取得DOM解析器

  • domParser.parse(*.xml)加载需要解析的XML文件

  • Document.getDocumentElement()取得XML文件的根元素/节点

  • Element.getNodeName():取得根元素

  • Element.getElementsByTagName("汽车")取得"汽车"元素的集合

  • NodeList.item(i)取得第N个元素,从0开始

  • Element.getTextContent():取得元素的文本内容

  • Element.getAttributes().getNamedItem("出产时间").getTextContent():取得元素中某属性的值

  • document.createElement("汽车");创建新元素

  • Element.setTextContent("我的汽车");设置元素的内容

  • Element.appendChild(newCarElement);在尾部添加元素

  • Element.insertBefore(newCarElement,

  • rootElement.getElementsByTagName("汽车").item(1));在指定的元素前添加元素

  • TransformerFactory tf = TransformerFactory.newInstance();创建输出工厂

  • Transformer transformer = tf.newTransformer();创建输出对象

  • Source source = new DOMSource(document);创建内存的document对象

  • Result result = new StreamResult(new File("src/cn/itcast/xml/dom/car.xml"));指定输出的目标地点

  • transformer.transform(source,result);将document对象输出到xml文件中

  • Element.setTextContent("深圳");更新元素的内容

  • Element.removeChild(secondCarElement);在父元素基础上删除直接子元素

dom解析器会将空白字符当作有效元素对待

要让dom解析器将空白字符忽略,必须满足二条件
a)对XML文件必须写一个DTD约束
b)factory.setIgnoringElementContentWhitespace(true);

dom类解析器和sax类解析器
a)dom是一次性加载到内容,形成document对象,人工导航,适合curd
b)sax是分次性加载到内容,sax解析器导航,但程序员需要编写sax处理器,必须扩展DefaultHandler类,适合r

car.xml

<车辆清单>    <汽车>        <车牌 出产时间="2010年">奥迪</车牌>        <产地>北京</产地>        <单价>30</单价>    </汽车>    <汽车>        <车牌 出产时间="2012年">本田</车牌>        <产地>深圳</产地>        <单价>60</单价>    </汽车></车辆清单>
import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;//使用DOM解析器解析XML文件public class Demo1 {    public static void main(String[] args) throws Exception {        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();        DocumentBuilder domParser = factory.newDocumentBuilder();        Document document = domParser.parse(new File("src/cn/itcast/xml/dom/car.xml"));        Element rootElement  = document.getDocumentElement();        System.out.println("根元素为:"+rootElement.getNodeName());        NodeList nodeList = rootElement.getElementsByTagName("汽车");        System.out.println("共有:" + nodeList.getLength()+"辆汽车");        System.out.println("++++++++++++++++++++++++++");        for(int i=0;i<nodeList.getLength();i++){            Element element = (Element) nodeList.item(i);            String band = element.getElementsByTagName("车牌").item(0).getTextContent();            String place = element.getElementsByTagName("产地").item(0).getTextContent();            String price = element.getElementsByTagName("单价").item(0).getTextContent();            String time = element.getElementsByTagName("车牌").item(0).getAttributes().getNamedItem("出产时间").getTextContent();                 System.out.println("车牌:" + band);            System.out.println("产地:" + place);            System.out.println("单价:" + price);            System.out.println("出产时间:" + time);            System.out.println("-------------------------");        }    }}

结果:
根元素为:车辆清单
共有:2辆汽车
++++++++++++++++++++++++++
车牌:奥迪
产地:北京
单价:30
出产时间:2010年

车牌:本田
产地:深圳
单价:60
出产时间:2012年

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消