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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用DOM解析器解析XML文件 学习笔记相关的知识,希望对你有一定的参考价值。

  • dom解析和dom4j原理一致
  • Node是所有元素的父接口
  • 常用的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年

    以上是关于使用DOM解析器解析XML文件 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

    笔记:XML-解析文档-DOM

    DOM解析xml文件

    笔记:XML-解析文档

    笔记:XML-解析文档-流机制解析器(SAXStAX)

    JavaScripts学习日记——DOM SAX JAXP DEMO4J XPath

    xml解析