zoukankan      html  css  js  c++  java
  • Java XML存储

    遵循原则:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

    XML与操作系统无关,与编程语言无关,可以实现不同系统之间的数据交换
         XML文档内容由一系列标签元素组成
         <标签名 属性名="属性值"></标签名>
        

    <元素名 属性名="属性值">元素内容</元素名>
          ---属性值中不能直接包含<、“、&(不建议 '、>)


         所有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基石

    解析技术:
         JDK:操作节点方便,读写繁琐
         ---三方jar包
         SAX:操作节点繁琐,读写方便
         DOM4J:操作、读写方便;性能高!!   

    非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()+" ");
             System.out.println(document.getNodeTypeName());
             //3.获取根目录
             Element rootEle = document.getRootElement();
             System.out.print("rootEle type:"+rootEle.getNodeType()+" ");
             System.out.print(rootEle.getNodeTypeName()+" ");
             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()+" ");
               System.out.print(attribute.getNodeTypeName()+" ");
               System.out.print(attribute.getName()+" ");
               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()+" ");
                     //System.out.println(element.getText()+" ");//不去除空格的文本内容,多个空格为一个
                     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()

  • 相关阅读:
    Dynamic 365 中创建编码规则
    程序员和产品经理之间的恩怨情仇
    Scrum已经俘获中国开发者的心? ——从《2017年开发者调查报告》看真相!
    不懂营销的产品经理不是好的产品经理
    关于程序猿之间丧心病狂的鄙视链——编辑器篇
    国内五款好用的开源建站系统
    程序员听到bug后的N种反应,太形象了
    功能至上!国内外最实用的协作类软件盘点
    关于程序员之间丧心病狂的鄙视链——编程语言篇
    结对编程体会
  • 原文地址:https://www.cnblogs.com/macro-renzhansheng/p/12550536.html
Copyright © 2011-2022 走看看