xml

1 篇文章 0 订阅

xml是一种可扩展标记语言.用来传输和存储数据,里面的数据以树形结构存储,可以对里面的数据添加约束,
约束有两种 dtd和schema ,目前使用dtd,xml和html类似,可以添加属性,有标签,标签成对出现,一个xml文件只能有一个根标签
xml中有些关键字不能写,需要通过cdata区转义.
xml的声明

<?xml version="1.0" encoding="utf-8"?>

一个将字符串转成xml文件的实例

public class Test1 {

    public static void main(String[] args) {
        try {
            String str = "<student id='num2'><sts_name>李四</sts_name><sts_sex>男</sts_sex><sts_age>19</sts_age><sts_scl>youv</sts_scl></student>";
            //将String 类型的数据通过Document转换为树形结构
            Document doc = DocumentHelper.parseText(str);
            //写入过程
            writer(doc);
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

     /** 
     * 把document对象写入新的文件 
     *  
     * @param document 
     * @throws Exception 
     */  
    public static void writer(Document document) throws Exception {  
        // 紧凑的格式  
        //OutputFormat format = OutputFormat.createCompactFormat();  
        // 排版缩进的格式  
        OutputFormat format = OutputFormat.createPrettyPrint();  
        // 设置编码  
        format.setEncoding("UTF-8");  
        // 创建XMLWriter对象,指定了写出文件及编码格式  
        // XMLWriter writer = new XMLWriter(new FileWriter(new  
        // File("src//a.xml")),format); 
        //这里可以选择使用字节流还是字符流 
    XMLWriter writer = new XMLWriter(new OutputStreamWriter(
                new FileOutputStream(new File(
                        "students2.xml")), "UTF-8"), format);
        // 写入  
        writer.write(document);  
        // 立即写入  
        writer.flush();  
        // 关闭操作  
        writer.close();  
    } 


}

xml的解析.
xml的解析有两种方式dom解析和sax解析
dom解析:将xml文件全部读取,在内存中创建一个树状结构图,然后根据需要获取想要的部分,占用内存空间较大
sax解析:以类似流媒体的形式 去读取文件但并不保存,而是在读取的同时判断,是否是需要的数据,
两者各有优点..使用dom较多

使用dom4j解析xml文件.
使用dom需要导入dom的jar包
采用了解析器工厂获取xml元素,

public class Dom4j_Dom {
    @Test
    public void dompareXml() throws Exception {
        File file = new File("src/com/youv/xml/test/students.xml");
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = dbf.newDocumentBuilder();
        DOMReader reader = new DOMReader();
        Document doc = reader.read(builder.parse(file));
        // 获取根节点的元素对象
        Element node = doc.getRootElement();

        // 遍历所有的元素的节点
        listnode(node);

    }

    /*
     * 遍历当前节点元素下面的所有(元素的)子节点 遍历当前节点元素下面所有(元素的)的子接点
     */
    @SuppressWarnings("unchecked")
    public void listnode(Element node) {
        // 获取根节点
        System.out.println("根节点的名字" + node.getName());
        // 获取节点下的所有属性节点
        List<Attribute> list = node.attributes();
        // 遍历
        for (Attribute attr : list) {
            System.out.println(attr.getText() + "---" + attr.getName() + "---" + attr.getValue());
        }

        // 获取文本数据
        if (!(node.getTextTrim().equals(""))) {
            System.out.println("获取的文本内容是" + node.getText());

        }

        // node节点本身的迭代器,获取其内的子节点
        Iterator<Element> it = node.elementIterator();
        while (it.hasNext()) {
            // 获取子节点的对象
            Element ent = it.next();
            // 递归
            listnode(ent);
        }

    }
}

使用sax解析xml文件,
基本操作一样,不过是获取的sax对象

public class Dom4j_Sax {
    @Test
    public void saxPareXml() throws Exception{
        // 创建saxReader对象  
        SAXReader reader = new SAXReader();  
        // 通过read方法读取一个文件 转换成Document对象  
        Document document = reader.read(new File("src/com/youv/xml/test/students.xml"));  
        //获取根节点元素对象  
        Element node = document.getRootElement();  
        //遍历所有的元素节点  
        listNodes(node);  
    }

    /** 
     * 遍历当前节点元素下面的所有(元素的)子节点 
     *  
     * @param node 
     */  
    @SuppressWarnings("unchecked")
    public void listNodes(Element node) {  
        System.out.println("当前节点---" + node.getName());  
        // 获取当前节点的所有属性节点  
        List<Attribute> list = node.attributes();  
        // 遍历属性节点  
        for (Attribute attr : list) {   
          System.out.println(attr.getText() + "---" + attr.getName() + "---" + attr.getValue());  
        }  

        if (!(node.getTextTrim().equals(""))) {  
            System.out.println("文本内容---" + node.getText());  
        }  
        // 当前节点下面子节点迭代器  
        Iterator<Element> it = node.elementIterator();  
        // 遍历  
        while (it.hasNext()) {  
            // 获取某个子节点对象  
            Element e = it.next();  
            // 对子节点进行遍历  
            listNodes(e);  
        }  
    }  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值