Java对XML解析(笔记)

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(); 
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值