Java XML存儲

遵循原則:元數據(有關數據的數據)應當存儲爲屬性,而數據自己應當存儲爲元素。node

XML與操做系統無關,與編程語言無關,能夠實現不一樣系統之間的數據交換
     XML文檔內容由一系列標籤元素組成
     <標籤名 屬性名="屬性值"></標籤名>
     web

<元素名 屬性名="屬性值">元素內容</元素名>
      ---屬性值中不能直接包含<、「、&(不建議 '、>)數據庫


     全部XML元素都必須由結束標籤,大小寫敏感,正確的嵌套
     XML 數據以純文本格式進行存儲,所以提供了一種獨立於軟件和硬件的數據存儲方法。
     XML 數據以文本格式存儲。這使得 XML 在不損失數據的狀況下,更容易擴展或升級到新的操做系統、新應用程序或新的瀏覽器
     若是信息感受起來很像數據,那麼請使用子元素。
    
     避免 XML 屬性?
         因使用屬性而引發的一些問題:
             屬性沒法包含多重的值(元素能夠)
             屬性沒法描述樹結構(元素能夠)
             屬性不易擴展(爲將來的變化)
             屬性難以閱讀和維護
        
     請儘可能使用元素來描述數據。而僅僅使用屬性來提供與數據無關的信息。
     元數據(有關數據的數據)應當存儲爲屬性,而數據自己應當存儲爲元素。
     XML 屬性必須加引號
     子元素能夠重名!
    
     經過 DTD 驗證的 XML 是「合法」的 XML。
編程

DOM瀏覽器

    ——文檔對象模型,document object module    9
     ——節點:XML當中全部的內容均可以稱爲節點node   
     ——元素節點:#element,就是xml當中的標籤        1
     ——屬性節點:#Attribute,有值的(value)        2
     ——文本節點:#text,有值的(value)           
     ——註釋節點:
     **CDATA正常節點方式讀服務器

FWY9}47%V2{`SLK7YKY8{~1

應用領域:數據交互、     配置應用程序和網站、     Ajax基石dom

解析技術:
     JDK:操做節點方便,讀寫繁瑣
     ---三方jar包
     SAX:操做節點繁瑣,讀寫方便
     DOM4J:操做、讀寫方便;性能高!!    eclipse

非web工程的狀況:
     桌面應用swing
     第三方應用
     一些功能單一的中轉站編程語言


導入dom4j的jar包,生成Referenced Libraries工具

獲取路徑的兩種方式:

//1.從src日後找,若是找不到返回null
           pathString1 = ReadDemo.class.getClassLoader().getResource("demo.xml").getPath();

//2.從src日後找,若是找不到返回null
           String pathString1 = ReadDemo.class.getResource("/demo.xml").getPath();

讀取XML文檔

//開始解析
         //1.獲取解析器
         SAXReader reader = new SAXReader();
         String pathString = ReadDemo.class.getClassLoader()
                   .getResource("book.xml").getPath();
         System.out.println("book.xml path:"+pathString);
         //2.獲取文檔
         //reader.read(arg0)
         Document document = reader.read(new FileInputStream(new File(pathString)));
         System.out.print("document type:"+document.getNodeType()+"\t");
         System.out.println(document.getNodeTypeName());
         //3.獲取根目錄
         Element rootEle = document.getRootElement();
         System.out.print("rootEle type:"+rootEle.getNodeType()+"\t");
         System.out.print(rootEle.getNodeTypeName()+"\t");
         System.out.println(rootEle.getName());
        
         //4.獲取子元素
         rootEle.element("book");//根據節點名獲取第一個該名稱的節點
         rootEle.elements();//獲取全部子標籤
         rootEle.elements("book");//全部該名稱的子標籤

//獲取屬性值以及子元素內容

List<Element>bookList = rootEle.elements("book");
         for (Element book : bookList) {
           Attribute attribute = book.attribute("id");
           System.out.print("id attributes:"+attribute.getNodeType()+"\t");
           System.out.print(attribute.getNodeTypeName()+"\t");
           System.out.print(attribute.getName()+"\t");
           System.out.println(attribute.getValue());
         /*
          * 方法2
          * String idString = book.attributeValue("id"); System.out.println(idString);
          */
          
             List<Element> bookChildEle = book.elements();
             for (Element element : bookChildEle) {
                 System.out.print("bookChild element:"+element.getName()+"\t");
                 //System.out.println(element.getText()+"\t");//不去除空格的文本內容,多個空格爲一個
                 System.out.println(element.getTextTrim());//去除空格的文本內容
             }
         }

//寫文檔

        Document document = DocumentHelper.createDocument();
         Element books = document.addElement("books");
         Element book = books.addElement("book");
         Element book1 = books.addElement("book");

//簡單添加元素

        book.addAttribute("id", "bk001");
         book.addCDATA("test word1");
        
         book1.addAttribute("id", "bk002");
         book1.addCDATA("test word2");

//添加內容

       newBookElement.setText("JVM 原理");

//格式化
         OutputFormat format = OutputFormat.createPrettyPrint();
         format.setEncoding("UTF-8");
         //寫入文件
         String pathString = ReadDemo.class.getResource("").getPath();
//        System.out.println("當前路徑:"+pathString);
         XMLWriter writer = new XMLWriter(new FileOutputStream(new File(pathString,"booksWrite.xml")), format);
         writer.write(document);
         writer.close();
         System.out.println("success to write....");

【注意:若是是使用eclipse等繼承開發工具查看,注意刷新當前文件夾,才能看到!】





XMLHttpRequest 對象用於在後臺與服務器交換數據。


在 XML 中,省略關閉標籤是非法的。全部元素都必須有關閉標籤。

全部元素都必須彼此正確地嵌套

必須有一個元素是全部其餘元素的父元素

XML 的屬性值須加引號。

若是屬性值自己包含雙引號,那麼有必要使用單引號包圍它:

ex:

<gangster name='George "Shotgun" Ziegler'>
<gangster name="George &quot;Shotgun&quot; Ziegler">

XML 文檔常常有一個對應的數據庫,其中的字段會對應 XML 文檔中的元素。有一個實用的經驗,即便用數據庫的名稱規則來命名 XML 文檔中的元素。


優點:

1.XML 的優點之一,就是能夠常常在不中斷應用程序的狀況進行擴展。


使用屬性而引發的一些問題:

  • 屬性沒法包含多重的值(元素能夠)
  • 屬性沒法描述樹結構(元素能夠)
  • 屬性不易擴展(爲將來的變化)
  • 屬性難以閱讀和維護

請儘可能使用元素來描述數據。而僅僅使用屬性來提供與數據無關的信息。


從src日後獲取路徑:     ClassName.getResource("/file.txt").getPath()     ClassName.getClassLoader().getResource("file.txt").getPath()

相關文章
相關標籤/搜索