xml

xml语法:
  xml文档声明:
    用来声明xml的属性,用来指挥解析引擎如何解析xml
    通常是一个xml只能包含一个
    xml文档必须在整个xml最前面,在文档的之前不应有更多的文字
    <? xml version="1.0"?>version是版本类型
    <? xml version="1.0" encoding="GB2312"?>指明编码类型;
    gbk中2个字符表示一个汉字,utf-8中3个字符表示一个汉字;
    encoding="ISO-8859-1"解析为国外常用的字符;
    编码方式(encoding="")和解码方式(即当前的系统的编码方式)必须相同不然的话会出现乱码;
    <? xml version="1.0" encoding="GB2312" standalone="yes"?>standalone="yes"属性来
    说明是不是独立的xml默认yes即不需要依赖其他文档,
  元素
    一个xml标签就是一个元素
    一个标签又开始有结束
    有双标签,还有自闭标签
    一个标签中可以有很多子标签

  属性
    标签可以有一个或多个属性值用单引号或双引用;
    <name sex="女"/>
    属性的值必须用引号引起来相同的属性不能同时出现多次;

  注释
    <!--注释内容-->
    注释可以出现在任意位置,不能出现在文档之前
    不能嵌套注释;
  实体引用:<:&lt,>:&gt,&:&amp;单引号:&apos 双引号:&quot
 PCDATA 的意思是被解析的字符数据(parsed character data)。
    可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
    PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
    文本中的标签会被当作标记来处理,而实体会被展开。
    不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp;、&lt; 以及 &gt; 实体来分别替换它们。
    <!ELEMENT 元素名称 (#PCDATA)>
  CDATA区:
    如:张<name>这样表述时出错
    <![CDATA[内容]]>不能进行嵌套;<![CDATA[]]>
    CDATA的作用:不想把一些字符当做标记让解析器解析的字符时用,在这个区间的都是普通字符;

  处理指令:<了解>
    <? xml-stylesheet type="text/css"href="1.css"?>
  xml约束:
    主要用于约束xml文档的写法
    对xml进行校验;
    1.xml DTD
    2.xml Schema
    引入DTD约束的方式:
    .dtd文件用UTF-8或Unicode编码方式
    1.定义Xml文件的内部声明时:standalone="yes"
    2.定义一个外部的dtd后缀的文件中然后引入,:standalone="no"
    引入本地时:<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">    
    引入公共文件:<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">

  dtd约束语法:
    元素:
    <!ElEMENT 元素名 元素约束>
          元素约束:
       存放类型:ANY/EMPTY
       元素约束:子元素的列表可以用小括号分割;
        子元素之间用逗号分割表示按顺序出现;
        子元素之间用竖线分割,表示的是出现其中之一;
        #PCDATA 表示包含标签体;
        +:表示一次或多次;
        *:表示0次或多次;
        ?:表示0次活一次;
        也可以用括号()批量 设置;
    属性语法格式:
      <!ATTLIST 元素名 
            属性名 属性类型 属性约束
            属性名1 属性类型 属性约束
            ........>
    如:<!ATTLIST 商品
        类别 CDATA #REQUIRED
        颜色 CDATA #IMPLIED>

    属性类型:
        CDATA:表示属性的值为普通的字符串
        ENUMRATED:枚举类型;
        ID:表明属性的值在整个文档中必须是唯一的不能为空白字符;

    属性约束:
        #REQUIRED:表明一个必须存在的属性,属性值不存在时校验时报错
        #IMPLIED:表明是一个可选的属性
        #FIXED:表明是一个固定值,不需要进行赋值
        '默认值':表示当前属性有个默认值,赋值了就去赋值,没的话就为默认值
    ENTITY(实体)
        <!ENTITY>,就是一段内容的引用,为了代码的复用
        引用实体:在xml中使用的实体叫做引用实体
            <!ENTITY 实体名称 "实体内容">
            用法:&实体名称;
        参数实体:在dtd中引用的实体名称叫做参数实体;
            <!ENTITY %实体名称 "实体内容">
            %实体名称;
        如:
    <!ENTITY % TAG_NAMES "姓名 | EMAIL | 电话 | 地址">
        <!ELEMENT 个人信息 (%TAG_NAMES; | 生日)>
         <!ELEMENT 客户信息 (%TAG_NAMES; | 公司名)>
xml编程:利用Java去CRUD XML中的数据;
    xml解析方式:通过把 XML 解析器的 validateOnParse 设置为 "false",就可以关闭验证
1.dom解析:
    将整个XML使用类似树的结构保存在内存中,再对其进行操作。
    是 W3C 组织推荐的处理 XML 的一种方式。
    需要等到XML完全加载进内存才可以进行操作
    耗费内存,当解析超大的XML时慎用。{大的解析不行}
    可以方便的对xml进行增删该查操作{推荐使用删改}
2.sax解析:
    逐行扫描XML文档,当遇到标签时触发解析处理器,采用事件处理的方式解析xml
     (Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。
    在读取文档的同时即可对xml进行处理,不必等到文档加载结束,相对快捷
    不需要加载进内存,因此不存在占用内存的问题,可以解析超大XML
    只能用来读取XML中数据,无法进行增删改
    解析方式:
    1.获取解析器工厂
     SAXParserFactory factory=SAXParserFactory.newInstance();
     2.通过工厂获取sax解析器
     SAXParser parser=factory.newSAXParser();
     3.获取读取器
     XMLReader reder=parser.getXMLReader();
     4.注册事件处理器;向sax解析器创建实例
     reader.setContentHander(new MyContentHandel());
     5.解析
     reader.parse("xml文件");
     6.MyContentHandel实现ContentHanel接口中的方法;

xml解析开发包:
    1:Jaxp
使用方式:
       调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂。
       DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
       调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。
       DocumentBuilder builder = builderFactory.newDocumentBuilder();
       调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进行可以利用DOM特性对整个XML文档进行操作了。
       Document doc = builder.parse(new File("book.xml"));
    这个不需要导入其他包到eclipes;
JAXP中的文档对象:
    Document:文档
    Element:元素
    Attribute:属性
    CharacterData:标签体
这些都是对内存中的对象进行操作
如果要对xml文档的更新则需要用以下方法:
   获取Transformer工厂    
    TransformerFactory transformerFactory  =TransformerFactory.newInstance();
                            
   获取Transfomer对象
        Transformer transformer =  transformerFactory.newTransformer();
   创建代表输入和输出的Source和Result对象
        Source source = new DOMSource(doc);
        Result result = new StreamResult(new FIle("book.xml"));
   使用Transformer将 XMLSource 转换为 Result
        transformer.transform(source , Result);
                        

    2:dom4j
    Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。
    需要导入jar包
   解析方式:
    创建解析器:
        SAXReader reader = new SAXReader();
        利用解析器读入xml文档:
                Document   document = reader.read(new File("input.xml"));
        获取文档的根节点:
        Element root = document.getRootElement();
    dom4j字符串和xml的转换:
    1.将字符串转化为XML
        String text = "<members> 
                <member>
                sitinspring
                </member>
             </members>";
    Document document = DocumentHelper.parseText(text);
       2.将文档或节点的XML转化为字符串.
    String xmlStr = node.asXML();
Schema约束:
      符合xml语法结构;
      对名称空间支持好
      支持用户定义数据类型;
      可以进行语义级别的限定,
    文件的自身就是一个xml文件扩展名为:.xsd;
名称空间:::本质是独一无二的名字,为了标识资源的名字
    和资源的来源,只是一个名字而已,不是一个地址;
    其实就是类似与嵌套一个对于另一个约束,另一个依赖这个约束
    多个约束时就是这样的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kay三石 [Alay Kay]

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值