码迷,mamicode.com
首页 > 其他好文 > 详细

XML文档的使用方法

时间:2016-01-01 21:00:48      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:

一、 怎么样去写一个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)




XML文档的使用方法

标签:

原文地址:http://www.cnblogs.com/didixyy/p/47e9e2003f9f13595e66830da3841c91.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!