夜光 带你走进 Java基础编程实战(二十二 XML编程)

夜光序言:

 

人生若只如初见,浮沉繁华,蓦然回

首,不过过眼云烟。

 

我只在红尘中争渡,即便是一朵浪花

,亦奋勇向前……

 

 

 

 

 

 

 

正文:

 

package xml.dom;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class DomWriter {

    public static void main(String[] args) {
        
        
        try {
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();
            
            //新创建一个Document节点
            Document document = dbBuilder.newDocument();
            if (document != null) 
            {
                Element docx = document.createElement("document");    //都是采用Document创建元素        
                Element element = document.createElement("element");
                element.setAttribute("type", "paragraph"); 
                element.setAttribute("alignment", "left"); //element增加2个属性
                
                Element object = document.createElement("object");
                object.setAttribute("type", "text");
                
                Element text = document.createElement("text");
                text.appendChild(document.createTextNode("abcdefg")); //给text节点赋值
                Element bold = document.createElement("bold");
                bold.appendChild(document.createTextNode("true"));    //给bold节点赋值
                
                //夜光:我们通过appendChild来放入节点嗯
                object.appendChild(text);      //把text节点挂在object下
                object.appendChild(bold);      //把bold节点挂在object下
                element.appendChild(object);   //把object节点挂在element下
                docx.appendChild(element);       //把element节点挂在docx下        
                document.appendChild(docx);    //把docx挂在document下
                
                TransformerFactory transformerFactory = TransformerFactory.newInstance();
                Transformer transformer = transformerFactory.newTransformer();
                DOMSource source = new DOMSource(document);
                
                //定义目标文件
                File file = new File("dom_result.xml");
                StreamResult result = new StreamResult(file);
              
                //将xml内容写入到文件中
                transformer.transform(source, result);
                
                System.out.println("write xml file successfully");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }        
    }    
}

基础中有一个SAX:

package xml.sax;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;

public class SAXReader {
    public static void main(String[] args) throws SAXException, IOException {
        XMLReader parser = XMLReaderFactory.createXMLReader();
        BookHandler bookHandler = new BookHandler();
        parser.setContentHandler(bookHandler);
        parser.parse("books.xml");
        System.out.println(bookHandler.getNameList());
    }
}

class BookHandler extends DefaultHandler {
    
    //夜光:这里提到了继承嗯~~
    private List<String> nameList;
    private boolean title = false;

    public List<String> getNameList() {
        return nameList;
    }

    //下面,我们看到有五个回调方法~~夜光,有点意思的
    
    // xml文档加载时
    public void startDocument() throws SAXException {
        System.out.println("Start parsing document...");
        nameList = new ArrayList<String>();
    }

    // 文档解析结束
    public void endDocument() throws SAXException {
        System.out.println("End");
    }

    // 访问某一个元素
    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {

        if (qName.equals("title")) {
            title = true;
        }
    }

    // 结束访问元素
    public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
        // End of processing current element
        if (title) {
            title = false;
        }
    }

    // 访问元素正文
    public void characters(char[] ch, int start, int length) {
        
        if (title) {
            String bookTitle = new String(ch, start, length);
            System.out.println("Book title: " + bookTitle);
            nameList.add(bookTitle);
        }
    }

}

<bookstore>
    <books>
        <book category="COOKING">
            <title lang="en">China</title>
            <author>Giada De Laurentiis</author>
            <year>2005</year>
            <price>30.00</price>
        </book>
        <book category="CHILDREN">
            <title lang="en">Genius</title>
            <author>J K. Rowling</author>
            <year>2005</year>
            <price>29.99</price>
        </book>
        <book category="WEB">
            <title lang="en">Learning XML</title>
            <author>Erik T. Ray</author>
            <year>2003</year>
            <price>39.95</price>
        </book>
    </books>
</bookstore>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值