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

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

难度初级
时长 3小时 0分
学习人数
综合评分9.63
323人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.5 逻辑清晰
  • DOM4J 解析 xml 文件步骤
    1、创建一个 SAXReader 对象
        SAXReader saxReader = new SAXReader();
    2、将 xml 文件加载到 SAXReader 中,并获取 document 对象
        Document document = saxReader.read(fileName);
    3、通过 getRootElement() 获取根节点元素
        Element employeeRoot = document.getRootElement();
    4、通过 elementIterator() 获取子节点元素,返回 Iterator 返回迭代器
        Iterator eles = eleRoot.elementIterator();
    5、通过 while 遍历迭代器
        while(eles.hasNest()){
        Element ele = (Element)eles.next();}
    6、获取属性节点类似 JDOM 解析
        List<Attribute> attrs = ele.attributes();
    7、获取元素节点名、值
        ele.getName() ele.getStringValue()/ele.getText()
    8、获取属性节点名、值
        ele.getName() ele.geValue()

    查看全部
  • 导入jar包的两种方式:
    1.通过右键项目,选择build Path下的Add External Archives导入系统任意路径下的jar包。但是这种方式并没有将jar包真正导入项目中,一旦迁移,则会丢失
    2.通过右键项目,新建lib文件夹,直接将jar包拷贝到lib文件夹下,然后再通过build Path将jar包导入进来

    查看全部
  • 在JDOM中存储对象
    1.创建一个新的book类并将其实例化
    Book bookEntity = new Book();
    2.添加节点属性值到book
    if(attrName.equals("id")){
    personEntity.setId(attrValue);
    }
    3.添加子节点属性值到book
    if (child.getName().equals("name")) {
    bookEntity.setName(child.getValue());
    }
    else if (child.getName().equals("author")) {
    bookEntity.setAuthor(child.getValue());
    }
    else if (child.getName().equals("year")) {
    bookEntity.setYear(child.getValue());
    }
    else if (child.getName().equals("price")) {
    bookEntity.setPrice(child.getValue());
    }
    else if (child.getName().equals("language")) {
    bookEntity.setLanguage(child.getValue());
    }

    查看全部
  • JDOM 解析时乱码的处理步骤:
    1)修改xml文件的编码
    2)将InputStream封装为一个InputStreamReader,并在InputStreamReader的构造函数中指定正确的编码,然后将InputStreamReader传入到SAXBuilder中就可以处理中文乱码了
    利用代码问题解决局部乱码问题(需要利用InputStreamReader来解决)
    (1)InputStream in=new FIleStream("book.xml");
    (2)InputStreamReader isr = new InputStreamReader(in, "utf-8");
    (3)Document document = saxBuilder.build(isr);

    查看全部
  • DOM 解析
    获取节点名、值:getNodeName() getNodeValue() getTextContent()
    获取子节点:getChildNodes() 返回 NodeList
    获取属性节点:getAttributes() 返回 NamedNodeMap
    JDOM 解析
    获取节点名、值:getName() getValue()
    获取子节点:getChildren() 返回 List<Element>
    获取属性节点:getAttributes() 返回 List<Attribute>

    查看全部
  • //继续进行解析
    for (Element book : bookList) {
     System.out.println("===开始解析第"+(bookList.indexOf(book)+1)+"本书===");
     //解析book的属性
     List<Attribute> attrList = book.getAttributes();
    //    //知道节点下属性名称时,获取节点值
    //    book.getAttributeValue("id");
     //遍历attrList(针对不清楚book节点下属性的名字和数量)
     for (Attribute attr : attrList) {
      //遍历属性名
      String attrName = attr.getName();
      //遍历属性值
      String attrValue = attr.getValue();
      System.out.println("属性名:"+attrName+"---属性值:"+attrValue);
     }
     System.out.println("===结束解析第"+(bookList.indexOf(book)+1)+"本书===");
    }


    查看全部
  • JDOM的解析步骤
    1.获取SAXBuilder对象
    2.将文件加载到SAXBuilder中,并获取Document对象
    3.通过Document对象获取文件的根节点
    4.有了根节点,通过根节点获取它的孩子节点书的集合
    5.循环遍历孩子节点集合,通过getAttributes方法获取节点的属性Attribute集合
    6.通过attribute的getName和getValue方法分别获取属性的名称和值
    7.获得book下的节点,通过book节点对象的getChildren()方法获取子节点的集合
    8.再通过子节点的getName和getValue方法获取节点名和节点的值

    查看全部
  • JDOM解析文件步骤
    准备:导入jar包
    1.创建一个SAXBuilder对象
        SAXBuilder saxbuilder=newSAXBuilder();
    2.创建输入流,将xml文件加载到输入流中
        Inputstream in=new FileInputstream("xxx.xml");
    3.通过SAXBuilder的Build方法将输入流加载到saxb中获取dom对象
        Document doc = saxbuilder.build(in);
    4.通过document对象获取xml文件的根结点
        Element rootElement =doc.getRootElement();
    5.获取根结点下的子节点的List集合


    JDOM 开始解析前的准备工作

    //进行对books.xml文件的JDOM解析
    //准备工作
    //1.创建一个SAXBuilder的对象
    SAXBuilder saxBuilder = new SAXBuilder();
    InputStream in;
    try {
     //2.创建一个输入流,将xml文件加载到输入流中来
     in = new FileInputStream("books.xml");
     //3.通过saxBuilder的build方法,将输入流加载到saxBuilder中
     Document document = saxBuilder.build(in);
     //4.通过document对象获取xml文件的根节点
     Element rootElement = document.getRootElement();
     //5.获取根节点下的子节点的List集合
     List<Element> bookList = rootElement.getChildren();
    } catch (FileNotFoundException e) {
     e.printStackTrace();
    } catch (JDOMException e) {
     e.printStackTrace();
    } catch (IOException e) {
     e.printStackTrace();
    }


    查看全部
  • xml的SAX解析并将解析的内容及xml结构形式保存至Java对象中。
    SAX解析:
    1、获取一个SAXParserFactory的实例:SAXParserFactory factory = SAXParserFactory.newInstance();
    2、通过factory获取SAXParser实例:SAXParser parser = factory.newSAXParser();
    3、创建SAXParserHandler对象:SAXParserHandler handler = new SAXParserHandler();
    4、将xml文件和解析方式handler加载到SAXParser实例:parser.parse("books.xml",handler);
    解析的时候,是startElement-characters-endElement , characters解析完一个属性,就到endElement,然后又解析一个属性又到endElement,最后解析完全部属性,到endElement又到startElement开始下一个节点。
    ArrayList保存对象 ArrayList<Book> BookList=new ArrayList<Book>();
    BookList.add(book);book=null;后继续遍历
    public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException// qName是String类型节点名称;attributes是Attributes类型的实例,属性的意思;

    查看全部
  • /**
      * 获取节点值
      */
     @Override
     public void characters(char[] ch, int start, int length) throws SAXException {
      super.characters(ch, start, length);
      String value = new String(ch, start, length);
      if(!value.trim().equals("")){
       System.out.println("节点值:"+value);
      }
     }


    查看全部
  •  /**
      * 用来遍历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));
       }
      }
     }


    查看全部
  • DOM:全部读取先
    SAX解析:通过handler处理类逐个分析每个节点,从外到内逐个解析。。一个一个来
    startElement, endElement(开始标签解析,结束标签解析)

    步骤:
    1.通过SAXParserFactory的静态newInstance()方法获取SAXParserFactory实例factory
    SAXParserFactory factory = SAXParserFactory.newInstance();

    2.通过SAXParserFactory实例的newSAXParser()方法返回SAXParser实例parser
    SAXParser parser = factory.newSAXParser();
    parser.parse("路径",handler类型对象);(需创建见3)

    3.创建一个类继承DefaultHandler,重写其中一些方法进行业务处理并创建这个类的实例handler
    创建一个package继承DefaultHandler(。com那个)
    startElement()
    用于遍历xml的开始标签
    endElement()
    遍历xml结束标签
    startElement
    解析开始
    endElement
    解析结束

    SAX解析xml步骤
    1.通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory
    2.通过SAXParserFactory实例的newSAXParser()方法返回SAXParser实例parser
    3.创建一个类继承DefaultHandle,重写方发进行业务已处理创建这个类的实例handle

    查看全部
  • SAX解析原理

    查看全部
  • DOM解析XML文件的节点名与节点值

    //解析book节点的子节点
    NodeList childNodes = book.getChildNodes();
    //遍历childNodes获取每个节点的节点名和节点值
    System.out.println("第"+(i+1)+"本书共有"+childNodes.getLength()+"个子节点");
    for(int k=0;k<childNodes.getLength();k++){
     //区分出text类型的node以及element类型的node
     if(childNodes.item(k).getNodeType()==Node.ELEMENT_NODE){
      //获取element类型节点的节点名
      System.out.print("第"+(k+1)+"个节点的节点名:"+childNodes.item(k).getNodeName());
      //获取element类型节点的节点值
      //getFirstChild().getNodeValue()方法把第一个子节点的节点值输出
      //System.out.println("--节点值是"+childNodes.item(k).getFirstChild().getNodeValue());
      //getTextContent()方法把element类型的node中的文本全部输出
      System.out.println("--节点值:"+childNodes.item(k).getTextContent());
     }
    }


    查看全部
  • DOM解析XML文件的属性名和属性值

      //创建一个DocumentBuilderFactory的对象
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      
      //创建一个DocumentBuilder的对象
      try {
       //创建DocumentBuilder对象
       DocumentBuilder db = dbf.newDocumentBuilder();
       //通过DocumentBuilder对象的parser方法加载books.xml文件到当前项目下
       Document document = db.parse("books.xml");
       //获取所有book节点的集合
       NodeList bookList = document.getElementsByTagName("book");
       //通过NodeList的getLength()方法获取bookList的长度
       System.out.println("一共有"+bookList.getLength()+"本书");
       //遍历每一个book节点
       for(int i=0;i<bookList.getLength();i++){
        //前提:不知道属性名和属性个数
    //    //通过item(i)方法获取一个book节点,NodeList的索引值从0开始
    //    Node book = bookList.item(i);
    //    //获取book节点的所有属性集合
    //    NamedNodeMap attrs = book.getAttributes();
    //    System.out.println("第"+(i+1)+"本书共有"+attrs.getLength()+"个属性");
    //    //遍历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());
    //    }
        
        //前提:已经知道book节点有且只能有1个id属性
        //将book节点进行强制类型转换,转换成Element类型
        Element book = (Element)bookList.item(i);
        //通过getAttribute("id")方法获取属性值
        String attrValue = book.getAttribute("id");
        System.out.println("id属性的属性值为"+attrValue);
        
       }
      } catch (ParserConfigurationException e) {
       e.printStackTrace();
      } catch (SAXException e) {
       e.printStackTrace();
      } catch (IOException e) {
       e.printStackTrace();
      }


    查看全部

举报

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

微信扫码,参与3人拼团

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

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