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

Java眼中的XML---文件读取

难度初级
时长 3小时 0分
学习人数
综合评分9.63
323人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.5 逻辑清晰
  • 常用的节点类型

    查看全部
  • 四种解析xml文件的方式:DOM、SAX、DOM4J、JDOM

    查看全部
  • xml的作用

    查看全部
    0 采集 收起 来源:初次邂逅 XML

    2018-05-21

  • books.xml实例

    查看全部
    0 采集 收起 来源:初次邂逅 XML

    2018-05-21

  • xml结构简介

    查看全部
    0 采集 收起 来源:初次邂逅 XML

    2018-05-21

  • 常用的节点类型

    查看全部
  • xml文件解析sax>dom>dom4j>jdom

    查看全部
  • SAX解析XML的速度比DOM的块,
    SAX的解析XML的解析器,需要重写startElement()开始解析的方法and endElemaent()方法 结束解析的方法and characters()方法
    重写charaters()方法时,String(byte[] bytes,int offset,int length)的构造方法进行数组的传递
    再去除解析时多余空格
    if(!value.trim().equals("")){
    System.out.println(value);
    }


    使用 SAX 解析 XML 文件的节点名和节点间文本

    startElement方法——String qName(第三个参数):节点名

    startElement方法——Attributes attributes(第四个参数):节点名的属性操作

    characters方法——char[] ch(第一个参数):xml整个文本内容,所以需截取想要的内容

    如图代码+以下代码

    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    //调用DefaultHandler类的endElement方法
    super.endElement(uri, localName, qName);
    //判断是否针对一本书已经遍历结束
    if (qName.equals("book")) {
    System.out.println("======================结束遍历某一本书的内容=================");
    }
    }
    characters(char[] ch, int start, int length) 方法总结:

    简单来说解析器首先在startDocument之后会读取XML中的字符串(从根节点开始一直到根节点结束)并放入ch[]字符数组中去,然后在解析到#TEXT节点(包括空格和换行符)时使用start来标记字符在ch[]数组中的起始位置,length标记长度,然后调用character方法,character方法默认不会进行任何处理,想进行处理需要重写方法。
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    // TODO Auto-generated method stub
    super.characters(ch, start, length);
    value = new String(ch, start, length);
    if (!value.trim().equals("")) {
    System.out.println("节点值是:" + value);
    }
    }

    查看全部
  • 获取xml的标签
    开始:startElement(String uri, String localName, String qName,Attributes attributes)
    获取属性名:attributes.getQName(i);获取属性值:attributes.getValue(i)
    结束:endElement(String uri, String localName, String qName)

    解析xml元素(重写startElement()方法)
    1. 调用DefaultHanlder 的startElement()方法
    super.startElement(uri,localName,qName,attributes);
    2. 开始解析book元素属性
    /**
    * 解析xml元素
    */
    @Override
    public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
    // 调用父类(DefaultHandler)的startElement方法
    super.startElement(uri, localName, qName, attributes);
    // 开始解析book元素的属性
    if (qName.equals("book")) {
    // //已知book元素下属性的名称,根据属性名称获取属性值
    // String value = attributes.getValue("id");
    // System.out.println("book的属性值是:" + value);
    // 不知道book元素下属性的名称以及个数,如何获取属性名以及属性值
    int num = attributes.getLength();
    for (int i = 0; i < num; i++) {
    System.out.print("book元素的第" + (i + 1) + "个属性名是:"
    + attributes.getQName(i));
    System.out.println("---属性值是:" + attributes.getValue(i));
    }

    }
    }

    查看全部
  • SAX方式解析xml步骤
    1.通过SAXParserFactory的静态newInstance()方法获取一个SAXParserFactory的对象。

    SAXParserFactory factory = SAXParserFactory.newInstance();

    2.通过SAXParserFactory对象的newSAXParser()方法返回一个SAXParser类的对象。

    SAXParser parser = factory.newSAXParser();

    3.创建一个类继承DefaultHandler,重写其中的一些方法并创建类的实例.

    类SAXParserHandler implements DefaultHandler;

    4.通过SAXParser类的Parse(Stringname,df)方法解析xml文件,参数Stringname为路径名,df为继承于DefaultHandler类的实例化对象,不需要定义变量存储返回的类型.

    SAX是按节点顺序进行解析,遇到xml的声明即开始解析,遇到最后一个节点的尾节点便结束解析,需要用户自己定义一个类继承于DefaultHandler类来解析,遇到开始标签节点便通过startElement开始解析节点,遇到结束标签节点便通过endElement结束解析,再遇到开始节点继续通过startElement解析,一直循环直到xml文件最后的结束标签节点.

    5.在继承于DefaultHandler这个类中需要重写父类的startElement()和endElement()方法,来进行开始节点与结束节点的解析,再重写startDocument()方法与endDocument()方法来标识解析的开始与结束.

    public class SAXParserHandler extends DefaultHandler {

    /**
    * 用来标识解析开始
    */
    public void startDocument() throws SAXException {
    super.startDocument();
    System.out.println("SAX解析开始");
    }

    /**
    * 解析xml元素节点开始
    */
    public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
    super.startElement(uri, localName, qName, attributes);
    System.out.println("解析xml元素开始");
    }

    /**
    * 处理文本内容(获取的是整个XML文本内容)
    */
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    super.characters(ch, start, length);
    System.out.println("文本处理中...");
    }

    /* 解析xml元素节点结束
    */
    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    super.endElement(uri, localName, qName);
    System.out.println("解析xml元素结束");
    }

    /**
    * 用来标识解析结束
    */
    public void endDocument() throws SAXException {
    super.endDocument();
    System.out.println("SAX解析结束");
    }

    6.创建SAXParserHandler对象
            SAXParserHandler handler = new SAXParserHandler()
    7.调用parse(url,handler实例)方法
            parser.parse("book.xml",handler);

    查看全部
  • 解析文件节点以及子节点的值
    1.先获取子节点,Node下有方法getChildNodes()来获取某个节点的子节点的集合,返回NodeList类型.
    NodeList childNodes=book.getChildNodes()//包含book节点所有的子节点,两个标签之间的所有内容都看成是子节点.
    2.通过childNodes的getLength()方法返回字点的个数(空格与换行字符看成为一个文本节点,标签与结束标签看成一个元素节点)
    3.通过NodeList的item(i)获取指定位置子节点的名称返回Node类型.再用Node类型的getNodeName()方法就可以获取节点名
    Node childnode=childNodes.item(i);
    String name=childnode.getNodeName();
    可以通过Node类的getNodeType()来区分文本类型的node以及元素类型的node,看当前Node类型是否与Node."节点类型英文全称"相同.
    if(childnode.getNodeType==Node.ELEMENT_NODE)
    {System.out.println(name)}
    4.不能直接通过Node的getNodeValue()来获取节点的值,因为元素节点的nodeValue的返回值为null而且标签之间的文本被看做是该标签的子节点.所以要用Node的getFirstChild()此时获取的子节点为文本节点,Text节点类型的nodeValue返回值为节点内容,再getNodeValue()。
    或者直接用Node的getTextContent()方法直接获取节点值。
    如果该Node节点还存在其他子节点并且有节点值<name><a>呵呵呵</a>华以及咯</name>,那么用getFirstChild().getNodeValue()一样是null,因为获取的子节点仍然是element类型的
    如果用Node的getTextContent(),一样会把<a>元素节点当成是Content输出。 结果为呵呵呵华以及咯。

    查看全部
  • document.getElementByTagName(),获取标签集合<br>
    2.node.getAttribute(),获取属性集合(应该是一个Map集合)<br>
    3.NodeList集合(标签集合) NameNodeMap集合(属性集合)<br>

    1.获取book节点的子节点。NodeList childNodes =book.getChildNodes();<br>
    2.获取book下子节点的节点内容的两种方式:<br>
    1)childNodes.item(index).getFirstChild().getNodeValue();<br>
    2)childNodes.item(index).getTextContent();<br>
    第一种方式在其下面还有子节点时,会因为是Element节点所以默认的getNodeValue()返回值是null;<br>
    第二章方式在其下面还有子节点时,会将子节点内容与当前节点内容一起获取。
    注:在获取当前节点的子节点时,当前节点下的空格与回车符会被当做Text类型的子节点获取(#Test)。

    查看全部
  • 使用Dom解析xml文件的属性节点。
    在不知道节点属性的个数和属性名时:
    1、通过document.getElementByTagName("标签名")获得所有标签名的节点,得到一个NodeList集合
    2、通过NodeList.getLength()获得集合长度,遍历集合
    3、Node node = NodeList.item(index)获得里面的节点
    4、通过NamedNodeMap attrs = node.getAttributes()获取所有属性集合
    5、通过attrs.getLength()遍历集合,Node attr = atrrs.item(index)
    6、attr.getNodeName()获得属性名,attr.getNodeValue()获取属性值
    前提已经知道book节点有且只有1个id属性,将book节点进行强制类型转换,转换成element类型。
    1、通过document.getElementByTagName("标签名")获得所有标签名的节点,得到一个NodeList集合
    2、通过NodeList.getLength()获得集合长度,遍历集合
    3、element book=(element)bookList.item(i);//强制转换为element类型
    4、string attrValue = book.getAttribute("id");

    DOM 方式解析 XML
      DocumentBuilder db =
    DocumentBuilderFactory.newInstance().newDocumentBuilder();
      // 通过DocumentBuilder对象的parse方法加载books.xml文件到当前项目下
      Document document = db.parse("books.xml");
      // 通过标签名获取节点集合,  获取所有book节点的集合
      NodeList bookList = document.getElementsByTagName("book"); 
      // 遍历每一个book节点
      for(int i = 0; i < bookList.getLength(); i ++){
           // 通过 item(i) 方法 获取 一个book节点,nodeList的索引值从 0 开始
           Node book = bookList.item(i);
           // 获取 book 节点的所有属性的集合
           NameNodeMap attrs = book.getAttributes();
           // 遍历 book 的属性
           for(int j = 0; j < attrs.getLength(); j ++){
               // 通过 item(index) 方法获取 book 节点的某一属性
               Node attr = attrs.item(j); 
              // 获得属性名称
               System.out.print("属性名:" + attr.getNodeName());
               System.out.println("---属性值:" + attr.getNodeValue());
           }
      }

    查看全部
  • 获取xml文件内容的
    四种解析方式:DOM SAX DOM4J JDOM
    DOM、SAX :java 官方方式,不需要下载jar包
    DOM4J、JDOM :第三方,需要网上下载jar包
    DOM使用步骤:
    准备工作
    1、创建一个DocumentBuilderFactory的对象
    DocumentBuilderFactory dbf = DocumnetBuilderFactory.instance();
    2、创建一个DocumentBuilder的对象
    DocumentBuilder db = dbf.newDocumentBuilder();
    3、通过DocumentBuilder对象的parse方法加载xml文件到当前项目
    Document document = db.parse("*.xml");

    查看全部
  • 不同系统间通信、不同软件间通信、不同平台间通信使用xml文件
    XML文件用来存储数据和传输数据
    XML存储结构为树状
    xml声明:<?xml version="1.0"encoding="utf-8"? >

    XML作用:
    不同应用程序之间通信、传输信息(订票程序和支付程序)
    不同系统间的通信(例:Windows系统和IOS系统)
    不同平台间的数据共享(手机端和PC端)
    不同APP之间的通信,不同的平台间的通信,不同平台间的数据共享。XML文件主要用于存储以及传输信息。
    通过xml文件存储小型数据。

    查看全部
    0 采集 收起 来源:初次邂逅 XML

    2018-04-30

举报

0/150
提交
取消
课程须知
本课程是 Java 的中级课程,需要各位小伙伴们熟悉 Java 面向对象的思想,并能熟练掌握 Java I/O 的相关知识。对如何将内容写入 XML 文件感兴趣的小伙伴们,可以进入《Java 眼中的 XML --- 文件写入》一探究竟
老师告诉你能学到什么?
1、XML 的基本概念 2、XML 在实际项目开发中的的用途和优点 3、如何通过 Java 解析 XML

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!