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()+"\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()

posted @ 2020-03-23 10:12  小海_macro  阅读(964)  评论(0编辑  收藏  举报