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

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

难度初级
时长 3小时 0分
学习人数
综合评分9.63
323人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.5 逻辑清晰
  • 像<books>、<book>这种节点就属于ElementNode,而thinking in java、85.5这种就属于TextNode。 下面结合一张图来详细讲解Sax解析。 xml文件被Sax解析器载入,由于Sax解析是按照xml文件的顺序来解析,当读入<?xml.....>时,会调用startDocument()方法,当读入<books>的时候,由于它是个ElementNode,所以会调用startElement(String uri, String localName, String qName, Attributes attributes) 方法,其中第二个参数就是节点的名称,注意:由于有些环境不一样,有时候第二个参数有可能为空,所以可以使用第三个参数,因此在解析前,先调用一下看哪个参数能用,第4个参数是这个节点的属性。这里我们不需要这个节点,所以从<book>这个节点开始,也就是图中1的位置,当读入时,调用startElement(....)方法,由于只有一个属性id,可以通过attributes.getValue(0)来得到,然后在图中标明2的地方会调用characters(char[] ch, int start, int length)方法,不要以为那里是空白,Sax解析器可不那么认为,Sax解析器会把它认为是一个TextNode。但是这个空白不是我们想要的数据,我们是想要<name>节点下的文本信息。这就要定义一个记录当上一节点的名称的TAG,在characters(.....)方法中,判断当前节点是不是name,是再取值,才能取到thinking in java
    查看全部
  • 用SAX方法解析XML文件时,重写DefalutHandler的实现类对象的startElement()方法,可以在其中进行对节点属性的解析操作。 1、在已知节点元素下属性的名称的情况下获取对应的属性值: 用getValue("id");方法 2、在不知道节点元素下属性的名称与数量的情况下获取属性值: 先用attributes.getLength();方法获取其中属性的数量然后通过for循环来进行操作 再通过getQName(int index);来获取属性名,getValue(index);来获取对应的属性值
    查看全部
  • DOM下解析xml文件节点的属性: org-w3c-dom 一、未知节点属性的个数和属性名时: 1、Document类的.getElementsByTagName(标签名)方法,可通过标签名返回节点的集合(返回NodeList类型) (对于NodeList,得到的是具有相同标签名的节点的集合List,需要用for遍历。) 2、NodeList类的.getLength() 可返回集合的长度。 3、NodeList类的.item(int index) 可访问集合中下标为index的节点(index从0开始),(返回Node类型)。 4、Node类的.getAttributes() 返回节点Node的所有属性的集合(返回NamedNodeMap类型)。 5、NamedNodeMap类的.getLength() 可返回节点具有的属性的数目。 6、NamedNodeMap类的.item(int index) 可获取节点下索引值为index的属性,返回Node类型。 7、NamedNodeMap类的.getNodeName()可返回该属性的名称,通过.getNodeValue()返回属性值。 二、已知节点的属性只有一个,且属性名已知 1、Document类的.getElementsByTagName(标签名)方法,可通过标签名返回节点的集合(返回NodeList类型) 2、NodeList类的.getLength() 可返回集合的长度。 3、NodeList类的.item(int index)强制类型转换为Element类型。 4、Element类的.getAttribute(属性名) 可得到属性的值。(返回String类型)
    查看全部
  • 父节点下可以放多个子节点,用来当做描述父节点的属性及属性值;而相同类型的父节点的子节点可以一样可以不一样,例如图中的<book id=“1”> <book id=“2”>下的子节点,属性可以一样可以不一样,看个人需要去完成标签创建与完成。
    查看全部
    1 采集 收起 来源:初次邂逅 XML

    2018-03-22

  • 记得将book.xml文件另存为时选择UTF-8编码!!!!!!
    查看全部
    1 采集 收起 来源:初次邂逅 XML

    2017-04-17

  • DOM方式解析步骤
    查看全部
  • /** * DOM解析xml文件步骤: * 1.创建DocumentBuilderFactory对象dbf * 2.借助dbf.newDocumentBuilder()返回DocumentBuilder对象 db * 3.利用db.parse("books.xml")返回Document对象document * 4.document.getElementsByTagName()返回NodeList对象bookList * 5.Node book=bookList.item(i)获取bookList中的第i+1个节点 * 6.NamedNodeMap attrs=book.getAttributes()获取每本书的属性集合 * 7.Node attr=attrs.item(j)获取第j+1个属性 * 8.attr.getNodeName()获取属性名称,attr.getNodeValue()获取属性值 */
    查看全部
  • public class SAXParserHandler extends DefaultHandler { /** * 用来遍历开始标签 */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO 自动生成的方法存根 super.startElement(uri, localName, qName, attributes); } /** * 用来遍历结束标签 */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO 自动生成的方法存根 super.endElement(uri, localName, qName); } /** * 用来标识解析开始 */ @Override public void startDocument() throws SAXException { // TODO 自动生成的方法存根 super.startDocument(); System.out.println("SAX开始解析"); } /** * 用来标识解析结束 */ @Override public void endDocument() throws SAXException { // TODO 自动生成的方法存根 super.endDocument(); System.out.println("SAX结束解析"); } }
    查看全部
  • public class SAXTest { public static void main(String[] args) { // TODO 自动生成的方法存根 //创建一个SAXParserFactory的对象 SAXParserFactory factory=SAXParserFactory.newInstance(); try { //创建一个SAXParser的对象 SAXParser parser=factory.newSAXParser(); //创建一个SAXParserHandler(自己创建,继承DefaultHandler类)的对象 SAXParserHandler handler=new SAXParserHandler(); //调用parse(String url , HandlerBase hb)方法>>>开始解析,遍历开始标签,遍历结束标签,解析结束 parser.parse("books.xml", handler); } catch (ParserConfigurationException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (SAXException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
    查看全部
  • /** * 获取子节点 */ //获取所有book节点的子节点的集合 NodeList ChildList = book.getChildNodes(); //输出子节点数量 System.out.println("第"+(i+1)+"本书共有"+ChildList.getLength()+"个子节点"); //遍历ChildList集合 for(int k = 0 ; k < ChildList.getLength() ; k++){ //通过item方法获取某一个子节点 Node Child = ChildList.item(k); /* * //获取子节点的名称并输出 * System.out.println("节点名:"+Child.getNodeName()); * 两个标签之间(包括结束标签到开始标签之间)的所有内容都看成是子节点 * 空格与换行字符看成为一个text类型的node,返回名称为:#text */ //区分text类型的节点和element类型的节点,并获取后者的节点名 if(Child.getNodeType()==Node.ELEMENT_NODE){ //获取节点类型方法&节点类型的表示方式 System.out.print("类型为element的节点名:"+Child.getNodeName()); //获取节点值并输出 //无效方法: System.out.println("---节点值:"+Child.getNodeValue()); //element类型的返回值默认为null //有效方法一: System.out.println("---节点值:"+Child.getFirstChild().getNodeValue()); //在其下面还有子节点时,会因为是Element节点所以默认的getNodeValue()返回值是null //有效方法二: System.out.println("---节点值:"+Child.getTextContent()); //在其下面还有子节点时,会将子节点内容与当前节点内容一起获取 } }
    查看全部
  • B_C
    1、DocumentBuilderFactory是抽象类,不能new对象实例,所以用Instance()方法来获取工厂解析器实例对象。 2、DocumentBulider同样不能new 对象,通过工厂解析器对象来产生此类的解析器对象: 工厂对象 . newDocumentBuilder() 3、通过解析器对象中的方法Parser(String uri)来解析xml文档文件。 //创建一个DocumentBuilderFactory的对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //创建一个DocumentBuilder的对象 try { //创建DocumentBuilder对象 DocumentBuilder db = dbf.newDocumentBuilder(); //通过DocumentBuilder对象的parse方法加载books.xml文件到当前项目下 Document document = db.parse("book.xml"); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
    查看全部
  • DOM遍历步骤: 1、获取工厂解析器对象; 2、从工厂解析器对象创建文档解析器对象; 3、传入待解析文档给解析器,准备进行解析; 4、首先获取到父结点对象数量,存入NodeList集合中; 5、一个循环遍历每一个父结点对象,取得其下的结点,返回类型为Node; 6、获取其下结点的属性,返回类型为NamedNodeMap(键值对映射); 7、然后再遍历各结点有没有子结点,也是返回NodeList类型存放; 8、遍历返回的子结点集合,取得子结点名和值。其间区分出element和text。
    查看全部
  • DOM解析XML文件步骤:1.创建一个DocumentBuilderFactory的对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 2.创建一个DocumentBuilder的对象 DocumentBuilder db = dbf.newDocumentBuilder(); --系统会提示try catch 3.调用parse方法返回值为Document对象 Document document = db.parse("传入文件名");--绝对路径相对路径都行
    查看全部
  • 解析XML:节点名 节点值 属性名 属性值 解析方式:DOM SAX (前两种为Java官方提供) DOM4J JDOM
    查看全部
  • <?xml version="1.0" encoding="UTF-8"?>声明头文件 问号格式 版本 编码 XML可以在不同程序 不同操作系统 不同平台中 进行数据传输
    查看全部
    1 采集 收起 来源:初次邂逅 XML

    2018-03-22

举报

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

微信扫码,参与3人拼团

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

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