xml解析

1.xml转义字符
    在xml中内置的一些特殊字符,这么特殊字符不能直接被浏览器原样输出,如果想实现原样输出
则要对这些特殊字符进行转义,转义后的字符就叫为转义字符
    特殊字符   转义字符
      <                &lt;
      >                &gt;
      "                &quot;
      &                &amp;
      空格            &nbsp;
2.xml解析
    按原理不同 :
        DOM解析
        SAX解析
3.xml的解析工具
    DOM解析的原理
        1) jaxp
        2) JDOM工具(非官方)
        3) Dom4j工具(非官方)
    SAX解析原理:
        1)sax解析工具
4.什么是DOM解析
    DOM解析的原理:xml解析器一次性把整个xml文档加载进内存,然后再内存中构建一颗Document的文档
对象树,通过Document对象,得到树上的节点对象,通过节点对象访问到xml文档的内容

5.Dom4j工具
    使用步骤:
        1)导入dom4j的核心包。 dom4j-1.6.1.jar
        2)编写Dom4j读取xml文件代码
6.Dom4j读取xml文件
    节点:
        Iterator Element.nodeIterator();//获取当前标签下的所有子节点
    标签:
        Element Document.getRootElement();//获取xml文档的根标签
        Element Element.element("标签名"); //指定名称下的第一个子标签
        Iterator<Element> Element.elementIterator("标签名");//指定名称下的所有的子标签
        List<Element> Element.elements(); //获取所有子标签
    属性:
        String Elemen.attributeValue("属性名称");//获取指定名称的属性值
        Attribute Element.attribute("属性名称");//获取指定名称的属性对象
        Attribute.getName(); //获取属性名称
        Attribute.getValue();//获取属性值
        List<Attribute> Element.attributes(); //获取所有属性对象
        Iterator<Attribute> Element.attributeIterator(); //获取所有属性对象
    文本:
        Element.getText();//获取当前标签的文本
        Element.elementText("标签名");//获取当前标签的指定名称的子标签的文本内容
7.读取xml
    将student.xml文档放到resource下
    public static void main(String[] args) throws Exception {
        XStreamDemo d = new XStreamDemo();
        d.getObjByxml();
    }
    public void getObjByxml() throws DocumentException{
        //创建xml解析器对象
        SAXReader reader = new SAXReader();
        String path = getClass().getResource("/").getPath()+"student.xml";
        Document doc = reader.read(path);
        //获取当前节点下的所有子节点 (不含孙节点)
        Element ele = doc.getRootElement();//获取跟标签
        StringBuilder sb = new StringBuilder();
        System.out.println(getObject(ele,sb));
    }
    public String getObject(Element ele,StringBuilder sb){
        sb.append("<"+ele.getName());
        List<Attribute> attr = ele.attributes(); //获取所有的属性
        if(attr!=null){
            for (Attribute attribute : attr) {
                sb.append(" "+attribute.getName()+"=\"" +attribute.getValue()+"\""); //获取属性名和属性值
            }
        }
        sb.append(">");
        
        Iterator<Node> it = ele.nodeIterator();//获取标签下的所有节点
        while(it.hasNext()) {
            Node node = it.next();
            if(node instanceof Element) { //如果是标签节点 就递归
                Element eles = (Element) node;
                getObject(eles,sb);
            }
            
            if(node instanceof Text) { //判断是否为文本节点
                Text text = (Text) node;
                sb.append(text.getText());
            }
            
        }
        //结束标签
        sb.append("</"+ele.getName()+">");
        
        return sb.toString();
                
    }
7.将xml转化为对象
    7.1xml文件:
    <persons>
        <person>
            <name>张三</name>
            <age>13</age>
            <birthday>1992.09.15</birthday>
            <gender>男</gender>
            <price>2.36</price>
            <address>
                <province>四川</province>
                <city>...</city>
                <area>...</area>
            </address>
            <address>
                <province>四川 </province>
                <city>...</city>
                <area>...</area>
            </address>
        </person>
    </persons>
    7.2 Person类
    class Person implements Serializable {
        private String name ;
        private Integer age;
        private Date birthday;
        private String gender;
        private Double price;
        private List<Address> address;
        //此处省略get set方法
    }
    7.3 Address类
    class Address implements Serializable {
        private String province;
        private String city;
        private String area;
        //此处省略get set方法
    }
    7.4 xml转化为Person对象
    public List<Person> getlistperson() throws Exception{
        List<Person> ps = new ArrayList<Person>();
        
        //创建xml解析器对象
        SAXReader reader = new SAXReader();
        String path = getClass().getResource("/").getPath()+"student.xml";
        Document doc = reader.read(path);
        //获取当前节点下的所有子节点 (不含孙节点)
        Element ele = doc.getRootElement();
        Iterator<Element> it = ele.elementIterator("person");
        while(it.hasNext()) {
            Element e = it.next();
            Person p = new Person();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
            p.setName(e.element("name").getText());
            p.setAge(Integer.parseInt(e.element("age").getText()));
            p.setBirthday(sdf.parse(e.element("birthday").getText()));
            p.setGender(e.element("gender").getText());
            p.setPrice(Double.parseDouble(e.element("price").getText()));
            List<Address> ads = new ArrayList<Address>();
            Iterator<Element>  addit = e.elementIterator("address");
            while(addit.hasNext()) {
                Element d = addit.next();
                Address add = new Address();
                add.setArea(d.element("area").getText());
                add.setProvince(d.element("province").getText());
                add.setCity(d.element("city").getText());
                ads.add(add);
            }
            p.setAddress(ads);
            ps.add(p);
        }
        
        return ps;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值