Java对XML解析(笔记)

来源:互联网 发布:淘宝卖家辱骂买家处罚 编辑:程序博客网 时间:2024/04/28 18:15

XML文件

<?xml version="1.0" encoding="utf-8"?><!--使用内部DTD文件--><!DOCTYPE pets [  <!ELEMENT pets (dogs,penguins)>  <!ELEMENT dogs (dog*)>  <!ELEMENT penguins (penguin+)>  <!ELEMENT dog (name,health,love,strain?)>  <!ATTLIST dog id CDATA #REQUIRED>  <!ELEMENT penguin (name,health,love,sex)>  <!ATTLIST penguin id CDATA #REQUIRED>  <!ELEMENT name (#PCDATA)>  <!ELEMENT health (#PCDATA)>   <!ELEMENT love (#PCDATA)>   <!ELEMENT starain (#PCDATA)>  <!ELEMENT sex (#PCDATA)>]><pets>  <dogs>    <dog id = "1">      <name>YAYA</name>      <health>100</health>      <love>99</love>      <strain>雪瑞</strain>    </dog>    <dog id = "2">      <name>OUOU</name>      <health>100</health>      <love>80</love>      <strain>拉布拉多</strain>    </dog>  </dogs>  <penguins>    <penguin id = "3">      <name>QQ</name>      <health>90</health>      <love>80</love>      <strain>Q仔</strain>    </penguin>  </penguins></pets>


DTD学习笔记

  一个XML文档均以一下简单模块构成:元素、属性、实体、PCDATA(被解析的字符数据)、CDATA(字符数据)

  <!DOCTYPE 文本根节点名称 [包含类别]>

  声明一个元素:<!ELEMENT 元素名称 类别>或<!ELEMENT 元素名称 (元素内容)>

  申明一个空元素:<!ELEMENT 元素名称 EMPTY>  如:<!ELEMENT br EMPTY>

  带有子元素(序列)的元素:<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>

 

  声明只出现一次的元素:<!ELEMENT 元素名称 (子元素名称)>

  声明最少出现一次的元素:<!ELEMENT 元素名称 (子元素名称+)>

  声明出现零次或多次的元素:<!ELEMENT 元素名称 (子元素名称*)>

  声明出现零次或一次的元素:<!ELEMENT 元素名称 (子元素名称?)>

  声明“非.../即...”类型的内容:<!ELEMENT note (to,from,header,(message|body))>


  声明属性:

  <!ATTLIST 元素名称 属性名称 属性类型 默认值>  如:<!ATTLIST payment type CDATA "check">

  属性类型:CDAT(值为字符数据),(e1|e2|...)(此值是枚举列表),ID(值为唯一的id),IDREF(值为另一个元素的id),IDREFS(值为其他id列表)

        NMTOKEN(值为合法XML名称),NMTOKENS(值为合法XML名称列表),ENTITY(为实体),ENTITIES(实体列表)NOATIOM(此值是符号的名称),

        xml:(值是一个预定义的xml值)

  默认值:值(默认值),#REQUIRED(值时必须的), #IMPLIED(值不是必须的), #FIXED value(值是固定的)


  实体声明:<!ENTITY 实体名称 "实体的值">  如:<!ENTITY writer "Bill Gates">

 


//得到Dom解析器的工厂实例DocumentBuliderFactory dbf = FocumentBuliderFactory.newInstance();try{    //从XML工厂获得DOM解析器    DocumentBulider db = dbf.newDocumentBulider();    //解析XML文档,得到一个Docment,即Dom树    Document doc = db.parse("pet.xml");    //得到所有dog节点列表信息    NodeList dogList = doc.getElementsByTagName("dog");    //循环dog信息    for(int i = 0; i < dogList.getLength(); i++){        //取得第i条dog的元素信息        Node dog = dogLisnt.item(i);        Element elementd = (Element)dog;        //取出第i  dog的属性id值        String attrValue = element.getAttribute("id");        //取得dog标签下的所有标签        for(Node node = dog.getFirstChild(); node != null; node = node.getNextSibling()){            //判断该节点是否为 Element节点            if(node.getNodeType() == Node.ELMENT_NODE){                //取得第i个节点的节点名称                String name = node.getNodeName();                //取得第i个节点的节点下的第一个子节点的值                String value = node.getFirstChild().getNodeValue();                System.out.print(name+":"+value+"\t");            }        }    } }catch(ParserConfigurationException e){     e.printStackTrace(); }catch(FileNotFoundException e){     e.printStackTrace(); }catch(SAXException e){         e.printStackTrace(); }catch(IoException e){     e.printStackTrace(); }


原创粉丝点击