欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Dom解析xml文件

程序员文章站 2022-05-29 08:20:35
...

XML指可扩展标记语言
XML的设计宗旨是传输存储数据
XML文档树结构
XML文档形成了一种树结构,它从“根部”开始,然后扩展到枝叶

利用dom规范,能够实现dom 文档和xml之间的相互转换,遍历、操作相应dom文档的内容
DOM规范的核心就是树模型

DOM解析xml的步骤:
1.// 获得解析器工厂对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2. // 通过解析器工厂对象新建一个文档解析器
DocumentBuilder builder = factory.newDocumentBuilder();
3.// 通过解析器解析xml文件,在内存中形成文档树(节点树)
// dom 适合于解析 xml 文件小,简单
Document doc = builder.parse(fileName);
4.// 根据标签名获得所有的 book 节点
NodeList nodeList = doc.getElementsByTagName(“book”);解析过程:
5.遍历节点集合 获取每个节点元素
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
获取节点的属性 element.getAttribute(属性名)
6.获取子节点的值
属性名称 = doc.getElementsByTagName(“title”).item(i).getFirstChild().getNodeValue();

  • 举个栗子 导包要注意 导org.w3c.dom.

    解析bookstore 的XML

<Book>
    <book id="1001">
        <bookname >红楼梦</bookname>
        <bookauther>曹雪芹</bookauther>
        <bookprice>34.6</bookprice>
        <bookdata>1912-11-5</bookdata>
    </book>
    <book id="1002">
        <bookname >朝花夕拾</bookname>
        <bookauther>54</bookauther>
        <bookprice>44.8</bookprice>
        <bookdata>1954-10-5</bookdata>
    </book>
    </Book>
  //造工厂
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        //利用工厂造解析器
        DocumentBuilder db = dbf.newDocumentBuilder();
        //利用解析器将xml转换为Document对象
        //导包  org.w3c.dom.
        Document doc = db.parse(new File("2021Hunan/src/Day0102/bookstore.xml"));
        //利用Doc获得所有的Node节点,Nodelist
        NodeList list = doc.getElementsByTagName("book");
        for (int i = 0; i < list.getLength(); i++) {
           Element ele= (Element) list.item(i);
            int id=Integer.parseInt(ele.getAttribute("id"));
            String bookname=doc.getElementsByTagName("bookname").item(i).getFirstChild().getNodeValue();
           String bookauther=doc.getElementsByTagName("bookauther").item(i).getFirstChild().getNodeValue();
           double bookprice= Double.parseDouble(doc.getElementsByTagName("bookprice").item(i).getFirstChild().getNodeValue());
            Date date =new SimpleDateFormat("yyyy-MM-dd").parse(doc.getElementsByTagName("bookdata").item(i).getFirstChild().getNodeValue());
//            Book book=new Book(id,bookname,bookauther,bookprice,date);
//            System.out.println(book);

dom解析的优点:十分的便于进行增删改查的操作,只要解析一次拿到dom对象后可以重复的使用减少解析次数
缺点:解析比较慢,需要将整个文档都加载到内存解析完成后才能进行操作,非常耗内存