详细的DOM解析XML文件

详细的DOM解析XML文件

 

 

目录

题目与要求:

(1)文件存放位置

(2)test.xml文件

(3)DOMtest.java文件

(4)结果截图

(5)感想

 

 

 

题目与要求:

针对test.xml构造DOM解析器

1.输出所有标签名称,标签内容,以”标签名:标签内容”输出     

2.在标签签名称后以”(属性,属性值)”形式输出标签内相应属性

3.给出图书质量平均值

4.给出阅读时间总量

(1)文件存放位置

这里一定要文件的存放文职正确,不然就会出现找不到文件的错误,可以参考下面的截图:

 

 

  1. test.dtd文件

<!ELEMENT 韩丢丢 (喜欢的图书列表,book-num*,like-book-num?)>

<!ATTLIST 韩丢丢:

       班级号    CDATA  #IMPLIED

       学号       CDATA  #REQUIRED

       性别      (|#REQUIRED

       年龄      CDATA   #REQUIRED

>

<!ELEMENT 喜欢的图书列表 (图书+)>

<!ATTLIST 喜欢的图书列表  图书数   CDATA  #FIXED "4">

<!ELEMENT 图书 (图书名,图书种类,图书评价,阅读时间)>

<!ELEMENT 图书名 (#PCDATA)>

<!ELEMENT 图书种类 (#PCDATA)>

<!ELEMENT 图书评价 (#PCDATA)>

<!ATTLIST 图书评价     图书质量   CDATA  #REQUIRED 图书内容   CDATA #REQUIRED>

<!ELEMENT 阅读时间 (#PCDATA)>

<!ELEMENT book-num (#PCDATA)>

<!ATTLIST book-num 是否共享 (|) #REQUIRED>

<!ELEMENT like-book-num (#PCDATA)>

<!ATTLIST like-book-num 是否共享  (|) #REQUIRED>

 

      

(2)test.xml文件

<?xml version = "1.0" encoding="utf-8"?>

<!DOCTYPE 韩丢丢 SYSTEM "test.dtd">

<!--我喜欢的图书-->

<韩丢丢 班级号="888888" 学号="99999999" 性别="" 年龄="21">

  <喜欢的图书列表 图书数="4">

     <图书>

       <图书名>幽默大全</图书名>

       <图书种类>轻松搞笑</图书种类>

       <图书评价 图书质量="90" 图书内容="90">轻松幽默</图书评价>

       <阅读时间>50</阅读时间>

     </图书>

     <图书>

       <图书名>时事评论</图书名>

       <图书种类>时事政治</图书种类>

       <图书评价 图书质量="80" 图书内容="85">犀利独到</图书评价>

       <阅读时间>100</阅读时间>

     </图书>

     <图书>

       <图书名>感动中国</图书名>

       <图书种类>时事政治</图书种类>

       <图书评价 图书质量="95" 图书内容="70">耐人寻味</图书评价>

       <阅读时间>120</阅读时间>

     </图书>

     <图书>

       <图书名>楼市分析</图书名>

       <图书种类>市场分析</图书种类>

       <图书评价 图书质量="85" 图书内容="95">剖析深入</图书评价>

       <阅读时间>65</阅读时间>

     </图书>

  </喜欢的图书列表>

  <book-num 是否共享="">106</book-num>

  <like-book-num 是否共享="">50</like-book-num>

</韩丢丢>   

(3)DOMtest.java文件

package dom;

 

import org.w3c.dom.*;

 

import javax.xml.parsers.*;

import java.io.*;

 

public class DOMtest {

  public static void main(String[] args) {

     GiveData give = new GiveData();

     try {

       DocumentBuilderFactory factory = DocumentBuilderFactory

            .newInstance();

       DocumentBuilder domParser = factory.newDocumentBuilder();

       Document document = domParser.parse(new File("test.xml"));

       NodeList nodeList = document.getChildNodes();

       give.output(nodeList);

       System.out.print(" " + "阅读时间总量:" + give.total + "\n");

       System.out.print(" " + "质量平均值:" + give.average / give.t);

 

     } catch (Exception e) {

       System.out.println(e);

     }

  }

}

 

class GiveData {

  double total = 0, m = 0, t = 0;

  double average = 0;

 

  public void output(NodeList nodeList) {

     int size = nodeList.getLength();

     for (int k = 0; k < size; k++) {

       Node node = nodeList.item(k);

       if (node.getNodeType() == Node.TEXT_NODE) {

         Text textNode = (Text) node;

         String content = textNode.getWholeText();

         System.out.print(content);

         Element parent = (Element) textNode.getParentNode();

         boolean boo = (parent.getNodeName()).equals("阅读时间");

         if (boo == true) {

            content = textNode.getWholeText();

            total = total + Double.parseDouble(content.trim());

         }

 

       }

       if (node.getNodeType() == Node.ELEMENT_NODE) {

         Element elementNode = (Element) node;

         String name = elementNode.getNodeName();

         System.out.print(name+":");

         NamedNodeMap map = elementNode.getAttributes();

         for (int m = 0; m < map.getLength(); m++) {

            Attr attrNode = (Attr) map.item(m);

            String attName = attrNode.getName();

            String attValue = attrNode.getValue();

            System.out.print("(" + attName + ":" + attValue + ")");

            if (attName.equals("图书质量")) {

              average = average + Double.parseDouble(attValue);

              t++;

            }

 

         }

 

         NodeList nodes = elementNode.getChildNodes();

         output(nodes);

       }

     }

  }

}

 

(4)结果截图

 

 

 

(5)感想

大家可以动手去实践一下!!!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值