Java基础-高级特性-简单总结(XML技术)

    XML是Extensible ,arkup Language 即可扩展标记语言的缩写,是一种简单的数据存储语言,使用一些列简单的标记来描述数据。

XML的特点如下:

    XML与操作系统、编程语言的开发平台都无关。

    规范统一。

文档结构:

     <---这个是第一行

    

        

        

    

    

        

    

根元素:

    a为根元素,具有唯一性。其余都为根元素的子元素。

    version表示文档符合XML1.0规范,encoding表示文档文字编码。

标签:

    b.c.d为标签,成对使用来界定字符数据。

元素:

    由开始标签,元素内容和结束标签组成。

    元素的命名规则如下:

        名称中可以包含字母、数字或者其他字符。

        名称不能以数字或者标点符号开始。

        名称不能以字符xml(或者XML、Xml)开始。

        名称中不能包含空格。

属性:

    属性定义语法格式:<元素名 属性名=“属性值”>

    一个元素可以有多个属性,多个属性之间用空格隔开。

    属性值中不能直接包含 < " & 等字符。

    属性可以加在任何一个元素的起始标签上,但不能加在结束标签上。

特殊字符的处理:

    <== < ;    >=>;    &==&;    "==";    '== ' ; 

    如果在元素的文本中有大量的特殊字符,可以使用CDATA节处理。

XML中的注释:

   

格式良好的XML文档规则:

    必须有XML声明语句。

    必须有且仅有一个根元素。

    标签大小写敏感。

    属性值用双引号括起来。

    标签成对出现。

    元素正确嵌套。

使用DOM解析XML:

    创建解析器工厂对象,即DocumentBuilderFactory对象。

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance( );

    由解析器工厂对象创建解析器对象,即DocumentBuilder对象。

        DocumentBuilder db=dbf.newDocumentBuilder( );

    由解析器对象对指定的XML文件进行解析,构建相应的DOM树,创建Document对象。

        Document doc =db.parse( xml 文档路径);

    以Document对象为起点对DOM树的节点进行增加,删除,修改,查询等操作。


    DOM中的方法自己查查API就好,有点多,手打累。

使用DOM解析如下xml,打印所有的书名,作者,价格,如果价格有种类,输出货币种类,而后添加一本书,书名西游记,作者吴承恩,售价85元。



    
        三国演义
        罗贯中
        30元
    
    
        水浒传
        施耐庵
        35元
    

解答如下:

public class DOMdemo1 {
    private Document document;
    public void getDom(){
        //获得解析器工厂
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        try {
            //根据解析器工厂获得解析器
            DocumentBuilder builder =  factory.newDocumentBuilder();
            //解析器解析XML文件获得Document对象
            document=builder.parse("文件路径");
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取书籍名称及其他信息
    public void showInfo(){
        //以Document做起点,拿到所有的book节点
        NodeList brands=document.getElementsByTagName("book");
        //遍历books,从中拿到每一个book
        for (int i = 0; i 

使用DOM4J解析XML:

   DOM4J是目前使用非常广泛的一种解析XML的技术,与DOM相比,其使用灵活,操作简单。DOM4J是一个易用的开源的库,最大的特色是使用大量的接口。

    DOM4J在使用前要导入DOM4j包,这个不多讲了。

    DOM4J只需要两步就可以获取Document对象。

        SAXRreder reader = new SAXRreader( ) ;

        Document document = reder.read(new File("XML文档路径")) ;

    其它流程就和DOM解析基本一样了,不过调用的方法相差还是比较多的,需要多用一用。

使用DOM4j解析如下xml,打印所有的书名,作者,价格,如果价格有种类,输出货币种类,而后添加一本书,书名西游记,作者吴承恩,售价85元。



    
        三国演义
        罗贯中
        30元
    
    
        水浒传
        施耐庵
        35元
    

解答如下:

public class SecondDOM4jTXT {
    private Document document;
    public void loadDocument(){
        SAXReader saxReader=new SAXReader();
        try {
            document =saxReader.read(new File("文件路径"));
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
    public  void show(){
        Element root=document.getRootElement();
        Iterator eleBook= (Iterator) root.elementIterator();
        while(eleBook.hasNext()){
            Element book =(Element) eleBook.next();
            Iterator eleTypes = book.elementIterator();
            while (eleTypes.hasNext()){
                Element type = (Element)eleTypes.next();
                if(type.attribute("currercy")!=null){
                    System.out.println("\t"+type.attributeValue("currercy")+""+type.getText());
                }else {
                    System.out.println("\t"+type.getText());
                }
            }
            System.out.println();
        }
    }
    public void addbook(){
        Element root =document.getRootElement();
        Element elbook =root.addElement("book");
        Element title =elbook.addElement("title");
        title.setText("西游记");
        Element author =elbook.addElement("author");
        author.setText("吴承恩");
        Element price =elbook.addElement("price");
        price.setText("85元");
    }
    public void save(String path){
        OutputFormat format = OutputFormat.createPrettyPrint();
        try {
            XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(path)),format);
            writer.write(document);
            writer.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SecondDOM4jTXT sd=new SecondDOM4jTXT();
        sd.loadDocument();
        sd.addbook();
        sd.save("保存路径");
        sd.show();
    }
}

在使用DOM和DOM4j时,没有什么难点,获取了Document对象往下找就好了,想找什么就调用什么方法。

练习:

分别使用DOM和DOM4j两种方式解析下面的XML文档,输出所有学员信息。



    
        苏虹
        20
        北方交大
    
    
        李明
        21
        北大
    

DOM

public class SecondDOM {
    private Document document;
    public void getDom(){
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder =  factory.newDocumentBuilder();
            document=builder.parse("studens.xml");
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void showInfo(){
        NodeList student=document.getElementsByTagName("student");
        for (int i = 0; i 

DOM4j

public class SecondDOM4j {
    private Document document;
    public void loadDocument(){
        SAXReader saxReader=new SAXReader();
        try {
            document =saxReader.read(new File("students.xml"));
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
    public  void show(){
        Element root=document.getRootElement();
        Iterator elestu= (Iterator) root.elementIterator();
        while(elestu.hasNext()){
            Element student =(Element) elestu.next();
            Iterator eleTypes = student.elementIterator();
            while (eleTypes.hasNext()){
                Element type = (Element)eleTypes.next();
                    System.out.println("\t"+type.getText());
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        SecondDOM4j sd=new SecondDOM4j();
        sd.loadDocument();
        sd.show();
    }
}

在上题XML文档中添加两个学员信息。张三 18 人民大学 李四 19 浙江大学

DOM

public class ThirdDOM {
    private Document document;
    public void getDom(){
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder =  factory.newDocumentBuilder();
            document=builder.parse("students.xml");
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void showInfo(){
        NodeList student=document.getElementsByTagName("student");
        for (int i = 0; i 

DOM4j

public class ThirdDOM4j {
    private Document document;
    public void loadDocument(){
        SAXReader saxReader=new SAXReader();
        try {
            document =saxReader.read(new File("students.xml"));
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
    public  void show(){
        Element root=document.getRootElement();
        Iterator elestu= (Iterator) root.elementIterator();
        while(elestu.hasNext()){
            Element student =(Element) elestu.next();
            Iterator eleTypes = student.elementIterator();
            while (eleTypes.hasNext()){
                Element type = (Element)eleTypes.next();
                System.out.println("\t"+type.getText());
            }
            System.out.println();
        }
    }
    public void addstu(){
        Element root =document.getRootElement();
        Element elstu =root.addElement("student");
        Element name =elstu.addElement("name");
        name.setText("张三");
        Element age =elstu.addElement("age");
        age.setText("18");
        Element school =elstu.addElement("school");
        school.setText("人民大学");

        Element root1 =document.getRootElement();
        Element elstu1 =root1.addElement("student");
        Element name1 =elstu1.addElement("name");
        name1.setText("李四");
        Element age1 =elstu1.addElement("age");
        age1.setText("19");
        Element school1 =elstu1.addElement("school");
        school1.setText("浙江大学");
    }
    public void save(String path){
        OutputFormat format = OutputFormat.createPrettyPrint();
        try {
            XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(path)),format);
            writer.write(document);
            writer.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        ThirdDOM4j td=new ThirdDOM4j();
        td.loadDocument();
        td.addstu();
        td.save("studentsDOM4j.xml");
        td.show();
    }
}

你可能感兴趣的:(Java)