樊聪

部分源码为加密模式,需要的同学请留言

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

XML

  HTML--->---XHTML--->XML(描述数据,做配置文件)

====================================

XML语法:

    文档声明  元素  属性  注释  CDATA  处理命令

====================================

文档声明

  <?xml version="1.0" encoding="UTF-8" standalone="yes/no" ?>

    gb2312-->中文

    standalone="yes/no"说明文档是否独立依赖另外的文档(IE浏览器不重视)用法不明确

==================================

元素/标签:element <a></a> 或 <a/>

==================================

属性:Attribute

    方法一:<input name="text"> 属性也可改成元素的形式来描述

    方法二:<input>

          <name>text</name>

        </input>

注释

    <!--注释-->

CDATA区域

     该区域内的数据,XML将其原封不动的输出

    <![CDATA[内容]]>

    <![CDATA[数据内容原封不动输出]]>

处理指令

    如何解析XML(风格)文档内容,用CSS显示XML内容

    <?xml-stylesheet type="text/css" href=" .CSS"?>

===================================================

***************************************************************

====================================================

XML约束

  1.XML DTD(框架需要写DTD) struts基与XML文档,XML基于DTD,但是无法约束存放的数    字,所以被Schema替代

    DTD: Document Type Definition(文档类型定义)

  2.XML Schema(重点)

-----------------------------------------------------------------------------------

  <?xml version="1.0" ?>

    !doctype文件类型(本地DTD文件)

    本地引用<!DOCTYPE 根节点 SYSTEM "book.dtd">---------->文件清单:

    网络公共<!DOCTYPE 根节点 PUBULIC "DTD名称" "DTD文件的URL">(网上使用)

  <书架>            book.dtd(dtd文件有汉字使用UTF-8||Unicode保存)

    <书>             <!-- !element元素 #CDATA字符串-->   

      <书名>....</书名>       <!ELEMENT 书架 (书+)>

      <作者>...</作者>        <!ELEMENT 书 (书名,作者,售价)>

      <售价>...</售价>          <!ELEMENT 书名 (#PCDATA)> 

    </书>               <!ELEMENT 作者 (#PCDATA)>

    <书>                <!ELEMENT 售价 (#PCDATA)>

      <书名>....</书名>

      <作者>....</作者>

      <售价>....</售价>

    </书>

  </书架>

---------------------------------------------------------------------------

DTD语法:

  元素(element)定义:

    <!ELEMENT 元素名称 元素类型>

               元素类型可以是元素内容或类型

      元素内容需要()起来

        <!ELEMENT 书架(书名,作者,售价)>

        <!ELEMENT 书名(#PCDATA)>

  元素类型:

      EMPTY:用于定义--空--元素

      ANY:表示元素内容为--任何--类型

      -----------------------------------------

      元素内容用逗号隔开,表示内容出现的顺序必须与声明一致

        <!ELEMENT 书架(书名,作者,售价)>

      元素内容用|分割,表示任选其一 即多个只能出现一个

        <!ELEMENT 书架(书名|作者|售价)>

      元素内容可以用+ * ?表示元素出现的次数

        + 1次或多次(书+)

        ?0次或者1次(书?)

        * 0次或者多次(书*)

-------------------------------------------------------------------

DTD定义属性

       通过ATTLIST设置标签属性

  语法格式:

      <!ATTLIST element名称

        属性名1 属性值 设置说明

        属性名1 属性值 设置说明

        ......

      >

  例如:

    <!ATTLIST 商品

      类别 CDATA #REQUIRED(必须的)required

      颜色 CDATA #IMPLIED(可选的)implied

      颜色 CDATA #FIXED(固定值)页面作者fixed

    >

属性值类型:

   CDATA:纯文本的字符串

   ENUMERATED:

   ID:唯一性(字母开头,不能用数字开头)

   ENTITY:(实体)entity

   ENTITY:用于为一段内容创建一个变量,以后再XML文档中就可以使用别名引用这段内容.

---------------------------------------------------------------------------------------

ENTITY分为引用实体,参数实体

   引用实体:主要在XML文档中被应用

      语法格式:

        <!ENTITY 实体名称 "实体内容" >直接转换成实体内容

      引用方式:

        &实体名称;(XML文档中写法)

   参数实体: 被DTD文件自身使用,(在XML中声明)

        语法格式:<!ENTITY %实体名称 "实体内容">

        例如:

          <!ENTITY % TAG_NAMES "姓名|电话">

          <!ELEMENT 个人信息 (%TAG_NAMES;|生日)>

----------------------------------------------------------------------------

Schema 定义和描述XML模式的语言,克制DTD的局限性
schema不能像DTD定义实体,比DTD更加复杂并且逐步取代DTD
扩展名为.xsd 并且绑定在URL中
scheme文档为模式文档(约束文档),根据它写的文档叫做实例文档
根节点为schema

===================================================

***************************************************************

===================================================

XML编程(crud)增删改查

  XML解析有两种:dom和sax(pull为android解析)

    dom(Document Object Model)当做对象解析全部放入内存中

       缺点:内存占用大容易内存溢出

         优点:增删改查容易

    sax(Simple API for XML)读一行解析一行

       缺点:不能增删改查,只是读取

      优点:内存消耗小 解析速度快

-----------------------------------------------------------------------------

JVM默认最大占用内存64M,否则抛出异常OutOfMemoryError

JVM虚拟机可以设置内存大小:

-Xmx80m(内存设为80M)  

-----------------------------------------------------------------------------

XML解析开发包:

   Jaxp(sun公司)(最差) Jdom dom4j(最好)

-----------------------------------------------------------------------------

Jaxp:

    //得到Factory

   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    // 得到DocumentBuilder解析器

     DocumentBuilder builder = factory.newDocumentBuilder();

    // 解析文档

    Document document = builder.parse("src/NewFile.xml");

-------------------------------------------------------------------------------

{得到Element内容} "书名2" <书名>书名2</书名>

    //Document读取 众多标签

NodeList list = document.getElementsByTagName("书名");

  // 得到其中之一的标签,从0开始

Node node = list.item(1);

  // 得到节点内容

String s = node.getTextContent();

-------------------------------------------------------------------------------

{得到所有标签}得到父亲,根据父亲得到孩子

    Node node = Document.getElementsByTagName("标签");

    NodeList  list = node.getChildNodes();所以的孩子

    //循环出每一个孩子

    for (int i = 0; i < list.getLength(); i++) {

       Node node2 = list.item(i);

    }

---------------------------------------------------------------------------------

{得到标签属性}

    //将得到的标签 Node强制转换成Element

  Element node = (Element) document.getElementsByTagName("书名").item(0);

    //得到标签属性。需要把Node转换成Element

  String  s = node.getAttribute("name");

---------------------------------------------------------------------------------

{添加Element}

Elemetn element = document.createElement("节点")

element.setTextContent("内容");

//写入XML中要先得到Element
Elemetn book = (Elemetn)document.getElementsByTagName("书").item(0)
//带上孩子
book.appendChild(element);

//更新后的内存数据写入XML中
TransformerFactory factory = TransformerFactory.newInstance();

//得到转换器
Transformer tran = factory.newTransformer();
tran.transform(new Domsource(document),new StreamResult(new FileOuputStream("src/.xml")));


//在指定的地方添加Element(在参考Element之前插入新Element)

  1,创建新Element
  2,得到参考Element
  3,得到挂崽的父类Element

    在父类插崽 父类.insetBefor(新建的Element,参考Element);

//删除Element  

  1.得到要删除的Element
  2.得到要删除的Element的父节点
  3.类删除儿子的方法 删除方法:remove | delete | kill

方法2; 

  1.得到要删除的Element
  2.getParentNode();得到父节点
  3.removeChild(自己);
  getParentNode().getParentNode().removeChild(父节点) 用爷节点删除父节点

//更新

  1.得到需要更新的Element
  2.设置新的内容.

  

 

posted on 2015-11-25 12:04  樊聪  阅读(139)  评论(0)    收藏  举报