<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    [收藏]dom4j(Version 1.6.1)快速入門

    Posted on 2006-04-05 12:35 ikingqu 閱讀(315) 評論(0)  編輯  收藏 所屬分類: JavaSE&JavaEEOthers
    Parsing?XML

    ????或許你想要做的第一件事情就是解析一個某種類型的XML文檔,用dom4j很容易做到。請看下面的示范代碼:

    import?java.net.URL;

    import?org.dom4j.Document;
    import?org.dom4j.DocumentException;
    import?org.dom4j.io.SAXReader;

    public?class?Foo?{

    ????public?Document?parse(URL?url)?throws?DocumentException?{
    ????????SAXReader?reader?=?new?SAXReader();
    ????????Document?document?=?reader.read(url);
    ????????return?document;
    ????}
    }

    使用迭代器(Iterators)


    ????我們可以通過多種方法來操作XML文檔,這些方法返回java里標準的迭代器(Iterators)。例如:

    public?void?bar(Document?document)?throws?DocumentException?{
    ????????Element?root?=?document.getRootElement();
    ????????//迭代根元素下面的所有子元素
    ????????for?(?Iterator?i?=?root.elementIterator();?i.hasNext();?)?{
    ????????????Element?element?=?(Element)?i.next();
    ????????????//處理代碼
    ????????}

    ????????//迭代根元素下面名稱為"foo"的子元素
    ????????for?(?Iterator?i?=?root.elementIterator(?"foo"?);?i.hasNext();?)?{
    ????????????Element?foo?=?(Element)?i.next();
    ????????????//處理代碼
    ????????}

    ????????//?迭代根元素的屬性attributes)元素
    ????????for?(?Iterator?i?=?root.attributeIterator();?i.hasNext();?)?{
    ????????????Attribute?attribute?=?(Attribute)?i.next();
    ????????????//?do?something
    ????????}
    ?????}

    強大的XPath導航


    ????在dom4j中XPath可以表示出在XML樹狀結構中的Document或者任意的節點(Node)(例如:Attribute,Element?或者ProcessingInstruction等)。它可以使在文檔中復雜的操作僅通過一行代碼就可以完成。例如:

    public?void?bar(Document?document)?{
    ????????List?list?=?document.selectNodes(?"http://foo/bar"?);

    ????????Node?node?=?document.selectSingleNode(?"http://foo/bar/author"?);

    ????????String?name?=?node.valueOf(?"@name"?);
    ????}

    ????如果你想得到一個XHTML文檔中的所有超文本鏈接(hypertext?links)你可以使用下面的代碼:

    ????public?void?findLinks(Document?document)?throws?DocumentException?{

    ????????List?list?=?document.selectNodes(?"http://a/@href"?);

    ????????for?(Iterator?iter?=?list.iterator();?iter.hasNext();?)?{
    ????????????Attribute?attribute?=?(Attribute)?iter.next();
    ????????????String?url?=?attribute.getValue();
    ????????}
    ????}

    ????如果你需要關于XPath語言的任何幫助,我們強烈推薦這個站點Zvon?tutorial他會通過一個一個的例子引導你學習。

    快速遍歷(Fast?Looping)



    如果你不得不遍歷一個非常大的XML文檔,然后才去執行,我們建議你使用快速遍歷方法(fast?looping?method),它可以避免為每一個循環的節點創建一個迭代器對象,如下所示:

    public?void?treeWalk(Document?document)?{
    ????????treeWalk(?document.getRootElement()?);
    ????}

    ????public?void?treeWalk(Element?element)?{
    ????????for?(?int?i?=?0,?size?=?element.nodeCount();?i?<?size;?i++?)?{
    ????????????Node?node?=?element.node(i);
    ????????????if?(?node?instanceof?Element?)?{
    ????????????????treeWalk(?(Element)?node?);
    ????????????}
    ????????????else?{
    ????????????????//?do?something....
    ????????????}
    ????????}
    ????}

    生成一個新的XML文檔對象


    ????在dom4j中你可能常常希望用程序生成一個XML文檔對象,下面的程序為你進行了示范:

    import?org.dom4j.Document;
    import?org.dom4j.DocumentHelper;
    import?org.dom4j.Element;

    public?class?Foo?{

    ????public?Document?createDocument()?{
    ????????Document?document?=?DocumentHelper.createDocument();
    ????????Element?root?=?document.addElement(?"root"?);

    ????????Element?author1?=?root.addElement(?"author"?)
    ????????????.addAttribute(?"name",?"James"?)
    ????????????.addAttribute(?"location",?"UK"?)
    ????????????.addText(?"James?Strachan"?);
    ????????
    ????????Element?author2?=?root.addElement(?"author"?)
    ????????????.addAttribute(?"name",?"Bob"?)
    ????????????.addAttribute(?"location",?"US"?)
    ????????????.addText(?"Bob?McWhirter"?);

    ????????return?document;
    ????}
    }

    將一個文檔對象寫入文件中


    ????將一個文檔對象寫入Writer對象的一個簡單快速的途徑是通過write()方法。

    ????????FileWriter?out?=?new?FileWriter(?"foo.xml"?);
    ????????document.write(?out?);

    如果你想改變輸出文件的排版格式,比如你想要一個漂亮的格式或者是一個緊湊的格式,或者你想用Writer?對象或者OutputStream?對象來操作,那么你可以使用XMLWriter?類。

    import?org.dom4j.Document;
    import?org.dom4j.io.OutputFormat;
    import?org.dom4j.io.XMLWriter;

    public?class?Foo?{

    ????public?void?write(Document?document)?throws?IOException?{

    ????????//?寫入文件
    ????????XMLWriter?writer?=?new?XMLWriter(
    ????????????new?FileWriter(?"output.xml"?)
    ????????);
    ????????writer.write(?document?);
    ????????writer.close();


    ????????//?以一種優雅的格式寫入System.out對象
    ????????OutputFormat?format?=?OutputFormat.createPrettyPrint();
    ????????writer?=?new?XMLWriter(?System.out,?format?);
    ????????writer.write(?document?);

    ????????//?以一種緊湊的格式寫入System.out對象
    ????????format?=?OutputFormat.createCompactFormat();
    ????????writer?=?new?XMLWriter(?System.out,?format?);
    ????????writer.write(?document?);
    ????}
    }

    轉化為字符串,或者從字符串轉化


    ????如果你有一個文檔(Document)對象或者任何一個節點(Node)對象的引用(reference),象屬性(Attribute)或者元素(Element),你可以通過asXML()方法把它轉化為一個默認的XML字符串:

    ????????Document?document?=?...;
    ????????String?text?=?document.asXML();

    如果你有一些XML內容的字符串表示,你可以通過DocumentHelper.parseText()方法將它重新轉化為文檔(Document)對象:

    ????????String?text?=?"<person>?<name>James</name>?</person>";
    ????????Document?document?=?DocumentHelper.parseText(text);

    通過XSLT樣式化文檔(Document)



    ????使用Sun公司提供的JAXP?API將XSLT?應用到文檔(Document)上是很簡單的。它允許你使用任何的XSLT引擎(例如:Xalan或SAXON等)來開發。下面是一個使用JAXP創建一個轉化器(transformer),然后將它應用到文檔(Document)上的例子:

    import?javax.xml.transform.Transformer;
    import?javax.xml.transform.TransformerFactory;

    import?org.dom4j.Document;
    import?org.dom4j.io.DocumentResult;
    import?org.dom4j.io.DocumentSource;

    public?class?Foo?{

    ????public?Document?styleDocument(
    ????????Document?document,?
    ????????String?stylesheet
    ????)?throws?Exception?{

    ????????//?使用?JAXP?加載轉化器
    ????????TransformerFactory?factory?=?TransformerFactory.newInstance();
    ????????Transformer?transformer?=?factory.newTransformer(?
    ????????????new?StreamSource(?stylesheet?)?
    ????????);

    ????????//?現在來樣式化一個文檔(Document)
    ????????DocumentSource?source?=?new?DocumentSource(?document?);
    ????????DocumentResult?result?=?new?DocumentResult();
    ????????transformer.transform(?source,?result?);

    ????????//?返回經過樣式化的文檔(Document)
    ????????Document?transformedDoc?=?result.getDocument();
    ????????return?transformedDoc;
    ????}
    }

    原文地址
    dom4j下載地址

    posts - 4, comments - 5, trackbacks - 0, articles - 60

    Copyright © ikingqu

    主站蜘蛛池模板: 免费看国产一级片| 亚洲成a人片在线观看国产| 亚洲中文字幕乱码一区| 国产一级大片免费看| 成在人线av无码免费高潮喷水| 亚洲精品不卡视频| 国产真实伦在线视频免费观看| a毛看片免费观看视频| 国产精品亚洲精品观看不卡| 亚洲综合色视频在线观看| 中文字幕视频在线免费观看| 人人狠狠综合久久亚洲高清| 国产精品成人免费观看| 国产成人A亚洲精V品无码| 久久久久久久久久国产精品免费 | 亚洲精品无码专区| 暖暖在线日本免费中文| 黄色免费网址大全| 亚洲国产另类久久久精品小说| 777爽死你无码免费看一二区| 亚洲男人天堂2022| 免费精品国产自产拍观看| A国产一区二区免费入口| 亚洲一区免费观看| 成年人性生活免费视频| 免费一级毛片在线播放视频免费观看永久 | 99re热精品视频国产免费| 亚洲成aⅴ人片在线影院八| 日韩激情无码免费毛片| 亚洲黄片手机免费观看| 一区二区三区亚洲| 免费中文字幕不卡视频| 久久久久免费精品国产| 亚洲一卡2卡3卡4卡5卡6卡| 久久亚洲AV无码西西人体| 国产电影午夜成年免费视频| jzzijzzij在线观看亚洲熟妇| 日本亚洲视频在线| 女人18毛片免费观看| a级毛片高清免费视频就| 亚洲男人天堂2022|