XML文档的使用方法

一、

怎么样去写一个xml

  1. XML的定义:xml:可扩展标记语言 所有的标签都可以自定义 根据项目的需要和实际的场景进行自定义
  2. xml的作用
    a. xml是配置文件的载体
    b.xml可以做为数据传输的载体
  3. xml的书写规范
    a.xml有一个良好的结构 必须有且只有一个根标签 正确嵌套
    b.xml的标签是以尖括号包裹关键字成对出现 有开始有结束 关键字自定义
    c.xml可以有属性 属性格式:属性="属性值" 多个属性之间使用空格
    d.xml可以有空标签
    e.xml区分大小写
  4. xml的组成
    a.文档声明:<?xml version="1.0" encoding="UTF-8"?>     version:版本号  encoding:告知浏览器的解码方式
    b.根标签:只能有一个根元素
    c.普通标签(标签名可以完全自定义)
    d.属性(属性也可以完全自己定义)
    e.文本
    f.CDATA区:就是将原文显示(原文中可以包括特殊字符)

二、怎么样去约束一个xml

  1. XML的约束的作用:指导怎样去写一个xml文件,需要符合约束条件(例如上图中,book必须要有 bookname的属性,这种情况就可以写XML约束)
  2. xml约束的种类
    a.DTD约束 (主要用于JAVAEE开发中)
    b.Schema约束(主要用于android开发中)
  1. DTD约束
    1. DTD约束的格式

      1. <!ELEMENT BookStore (book+)>
      2. <!ELEMENT book (name,author,price)>
      3. <!ELEMENT name (#PCDATA)>
      4. <!ELEMENT author (#PCDATA)>
      5. <!ELEMENT price (#PCDATA)>
      6. <!ATTLIST book bookname CDATA #REQUIRED>

      注意事项: 约束声明内容和标签名之间一定要有空格,否则会报错。

    2. DTD约束的引入方式:
      1. 内部DTD:DTD约束写在XML文件内部
        格式<!DOCTYPE BookStore [约束体]>

        1. <?xml version="1.0" encoding="UTF-8"?>
        2. <!DOCTYPE BookStore [
        3. <!ELEMENT BookStore (book+)>
        4. <!ELEMENT book (name,author,price)>
        5. <!ELEMENT name (#PCDATA)>
        6. <!ELEMENT author (#PCDATA)>
        7. <!ELEMENT price (#PCDATA)>
        8. <!ATTLIST book bookname CDATA #REQUIRED>
        9. ]>
        10. <BookStore>
        11. <book bookname="JavaEE">
        12. <name><![CDATA[java入门到精通]]></name>
        13. <author>张三</author>
        14. <price>998</price>
        15. </book>
        16. <book bookname="android">
        17. <name><![CDATA[ANDROID入门到精通]]></name>
        18. <author>张三</author>
        19. <price>998</price>
        20. </book>
        21. </BookStore>
      2. 外部DTD:DTD文件在本地,通过引入的方式加载
        格式:<!DOCTYPE BookStore SYSTEM "DTD文件的名字.dtd">
        1. <!DOCTYPE BookStore SYSTEM "BOOK.dtd">
      3. DTD文件在互联网:<!DOCTYPE bookstore PUBLIC "dtd的名称(标识符)" "dtd的互联网地址">
        示例:struts2的默认配置文件

        hibernate的配置文件

        dtd的名称书写标准:
        ISO标准以ISO字母开头
        改进的非ISO的DTD以“+”号开头
        未被改进的非ISO标准的DTD以“-”号开头

        dtd的名称的含义:
        //DTD所有者的名称//DTD描述的文件类型//语言的种类
  2. Schema约束
    1. Schema约束的简介:schema约束的源文件的后缀名.xsd  schema约束本身也是一个xml
    2. Schema的命名空间:
      1. 在.xsd文件中:

        1. <?xml version="1.0" encoding="UTF-8"?>
        2. <schema xmlns="http://www.w3.org/2001/XMLSchema"
        3. targetNamespace="http://www.example.org/demo1"
        4. xmlns:tns="http://www.example.org/demo1"
        5. elementFormDefault="qualified">
        6. <element name="BookStore">
        7. <complexType><!-- 复杂的内容如果有子标签就需要写这个 -->
        8. <sequence maxOccurs="1"><!-- 顺序标签 minOccurs:代表最少出现 maxOccurs最大出现次数 参数可以是unbounded代表无限次 -->
        9. <element name="book">
        10. <complexType>
        11. <sequence>
        12. <element name="name" type="string" ></element>
        13. <element name="author" type="string" ></element>
        14. <element name="price" type="string" ></element>
        15. </sequence>
        16. <attribute name="bookname" type="string" use="optional"></attribute>
        17. </complexType>
        18. </element>
        19. </sequence>
        20. </complexType>
        21. </element>
        22. </schema>

        xmlns:引入schema的命名空间 要使用哪个schema对我进行约束

        targetNamespace:命名空间 标识这个schema的命名空间

      2. 在bookstore.xml中
        1. <BookStore
        2. xmlns="http://www.example.org/demo1"
        3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        4. xsi:schemaLocation="http://www.example.org/demo1 demo1.xsd"
        5. >

        xmlns:要引入schema的命名空间

        xmlns:xsi:固定写法 代表本xml是一个schema的实例

        xsi:schamaLocation:代表真正的引入schema   写法:命名空间  和   schema的地址


        例子:spring的Schema约束的引入

三、怎么样去解析一个xml

  1. xml的解析方式
    1. DOM解析:先将文档全部加载内存
    2. SAX解析:边读边解析的方式
    3. PULL解析:边读边解析的方式

      问题:DOM解析和SAX解析的区别?
      dom解析 先将文档全部加载内存 可以支持文档的增删改查的操作 并且支持文档的回写.
      sax解析 边读边解析的方式 不支持文档的增删改的操作 并且不支持文档的回写
  2. xml的解析技术
    1. JAXP:sun公司 官方提倡使用的解析技术   既包括dom解析的API 也包括SAX解析的API
    2. JDOM:开源组织的开源的api  支持DOM解析
    3. DOM4J:是JDOM增强版 支持DOM解析
  3. XML解析案例
    1. dom4j解析xml(全部文档加载并解析)
      准备工作:准备dom4j的jar 并且导入需要使用解析的工程
      解析步骤:
      (1)创建解析器
      (2)加载需要解析文件
      (3)获取根标签元素
      (4)根据需求去解析想要的数据

      1. // (1)创建解析器
      2. SAXReader sr=new SAXReader();
      3. // (2)加载需要解析文件
      4. String path = Demo4j.class.getClassLoader().getResource("MyXml.xml").getPath();
      5. File f=new File(path);
      6. Document dou= sr.read(f);
      7. // (3)获取根标签元素
      8. Element root=dou.getRootElement();
      9. // (4)根据需求去解析想要的数据
      10. List <Element> list=root.elements();
      11. for(Element e:list)
      12. {
      13. System.out.println(e.elementText("name"));
      14. }

      涉及的方法:

      获得解析器:SaxReader reader = new SaxReader()

      加载xml文件:reader.read(uri);

      获取根元素:root document.getRootElement();

      获得所有的子元素:elements()

      获得指定的元素:element(String TagName)

      获得属性对象:Attribute attribute(String AttrName)

      获得所有的属性对象:attributes();

      获得属性值:attr.getValue()

      宿主标签对象直接获得属性值:attributeValue(String AttrName)

      获得文本element.getText()

      通过 父元素直接获得子元素的文本内容:父标签的element.elementText();

    2. pull解析(边读边解析。解析一条抛一条)
      准备工作:导入pull解析的jar包到需要解析的工程
      解析步骤:
      (1) 创建解析器工厂
      (2) 使用工厂去制造一个解析器
      (3) 将需要解析的文档放到解析器中
      (4) 进行解析
      案例详解:
      1. import java.util.ArrayList;
      2. import java.util.List;
      3. import org.xmlpull.v1.XmlPullParser;
      4. import org.xmlpull.v1.XmlPullParserFactory;
      5. public class Pull
      6. {
      7. /**
      8. * @param args
      9. * @throws Exception
      10. */
      11. public static void main(String[] args) throws Exception
      12. {
      13. // TODO Auto-generated method stub
      14. List<Book> li = null;
      15. Book b = null;
      16. // (1) 创建解析器工厂
      17. XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
      18. // (2) 使用工厂去制造一个解析器
      19. XmlPullParser xp = factory.newPullParser();
      20. // (3) 将需要解析的文档放到解析器中
      21. xp.setInput(Pull.class.getClassLoader()
      22. .getResourceAsStream("MyXml.xml"), "UTF-8");
      23. // (4) 进行解析
      24. // 需求:将文档中的数据保存到一个集合
      25. int type = 0;
      26. while ((type = xp.getEventType()) != XmlPullParser.END_DOCUMENT)
      27. {
      28. String name = xp.getName();
      29. System.out.println(name);
      30. switch (type)
      31. {
      32. case XmlPullParser.START_TAG:
      33. if ("BookStore".equals(name))
      34. {
      35. li = new ArrayList<Book>();
      36. }
      37. else if ("book".equals(name))
      38. {
      39. b = new Book();
      40. b.setBookname(xp.getAttributeValue(0));
      41. }
      42. else if ("name".equals(name))
      43. {
      44. b.setName(xp.nextText());
      45. }
      46. else if ("author".equals(name))
      47. {
      48. b.setAuthor(xp.nextText());
      49. }
      50. else if ("price".equals(name))
      51. {
      52. b.setPrice(Integer.parseInt(xp.nextText()));
      53. }
      54. break;
      55. case XmlPullParser.END_TAG:
      56. if ("book".equals(name))
      57. {
      58. li.add(b);
      59. }
      60. break;
      61. }
      62. xp.next();
      63. }
      64. for (Book book : li)
      65. {
      66. System.out.println(book);
      67. }
      68. }
      69. }

      注意,每个标签选择结束后,需要移动到下一个元素,空白处也是元素(取值为null)

来自为知笔记(Wiz)

时间: 2024-07-31 10:34:51

XML文档的使用方法的相关文章

XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。

XML DOM DOM 把 XML 文档视为一种树结构.通过这个 DOM 树,可以访问所有的元素.可以修改它们的内容(文本以及属性),而且可以创建新的元素.元素,以及它们的文本和属性,均被视为节点. 在本教程的较早章节中,我们介绍了 XML DOM,并使用了 XML DOM 的 getElementsByTagName() 从 DOM 树中取回数据. 在本节中,我们将讲解一些其他较常用的 XML DOM 方法.在本例中,我们使用 XML 文件 books.xml,并使用一个 JavaScript

文档对象模型操作xml文档

简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规范化接口.DOM是表示文档(比如HTML和XML)和访问.操作构成文档的各种元素的应用程序接口,它以树状结构表示HTML和XML文档,定义了遍历这个树和检查.修改树的节点的方法和属性. DOM的核心API还允许你创建和填充文件.加载文档并保存. 2.2DOM实现 微软的net框架在Systemx.x

【Win 10应用开发】把文件嵌入到XML文档

把文件内容嵌入(或存入)到XML文档中,相信很多朋友会想到把字节数组转化为Base64字符串,再作为XML文档的节点.不过,有人会说了,转化后的base64字符串中含有像“+”这样的符号,写入到XML文档中会发生解析错误. 不知你是否想起XML文档有一种CData内容节点,它可以忽略对字符的解析处理,使用CData节点,可以存放base64字符串. 要在Win App中实现这种处理也不难. 读写XML文档有多种方法,既可以使用.net core中的类,也可以用Linq to XML,还可以用运行

.NET(C#)使用Serialize、Deserialize序列和反序列化XML文档

本文给大家分享一下C#操作(读取.写入)XML文档的实用方法,即用.NET本身提供的Deserialize和Serialize进行反序列化和序列化XML文档.这种方法主要是对比较规范的XML文档进行操作,因为它(XML文档)和类对象是严格对应的,否则在反序列或序列化的时候会出现错误.其他的不用多说,直接看示例代码吧: using System; using System.Collections.Generic; using System.IO; using System.Linq; using

源生API解析XML文档与dom4j解析XML文档

一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可以存储数据. 1.XML语言书写的注意事项 1.XML标签命名自定义[推荐英文],标签名中不能包含空格 2.XML空格和换行都表示数据,严格区分大小写 3.XML中特殊字符表示的数据需要使用特殊字符编码和HTML一样 4.CDATA区中的数据不会被识别为语法 <![CDATA[王天霸<>&l

四种生成和解析XML文档的方法详解

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 一.介绍及优缺点分析 1. DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的. [优点]      ①允许应用

读取带命名空间的Xml文档的方法备忘

很久没有做xml方面的解析,今天接到一个小任务,需要解析xml里面的字段内容,顺带复习了一下xpath方面的知识.需要解析的xml是那种待namespace的文档,一开始解析就碰到问题,我就感觉是命名空间在作怪,印象中之前也处理过这种问题,但时间久远,都忘记了,也没有记录下来. 折腾了一会总算找到了方法,.NET中读取带xml命名空间的xml文档的方式确实麻烦,不够直接.不管怎样,还是记录一下解决方法,省得以后又要被折腾一次. StringReader textReader = new Stri

艺多不压身 -- 四种生成和解析XML文档的方法详解

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SAX: JDOM: DOM4J: 一.介绍及优缺点分析 1. DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然

详解xml文件描述,读取方法以及将对象存放到xml文档中,并按照指定的特征寻找的方案

主要的几个功能: 1.完成多条Emp信息的XML描述2.读取XML文档解析Emp信息3.将Emp(存放在List中)对象转换为XML文档4.在XML文档中查找指定特征的Emp信息 dom4j,jaxen 官网下载页面: http://sourceforge.net/projects/dom4j/files/dom4j-2.0.0-ALPHA-2/ 也可以在网盘上面下载:http://yunpan.cn/cwaNde7UYN83d  提取码 e247 1 完成多条Emp信息的XML描述 1.1 问