xml解析

xml (extensible markup language)
1.xml 是可扩展标记语言
2.xml是一种标记语言,类似于html
3.xml的设计宗旨是传输数据,而非显示数据
4.xml没有被预定义
5.使用约束的xml文档设计具有自我描述性
6.xml是w3c的推荐标准
xml格式
1.描述:<?xml version="1.0" encoding="gbk" ?>
2.根元素
3.子元素
xml元素命名
1.区分大小写
2.字母开头,不能以数字开头
3.命名空间不能包含空格
注释
格式:
注意:不能嵌套
CDATA区 - 解析器不解析此内容
格式: <![CDATA[ 内容 ]]>
转义字符
& : &
< : <
> : >
" : "
' : '
空格 :  
引入css
格式: <?xml-stylesheet type="text/css" href="xx.css" ?>
xml约束
1.DTD
2.Schema

DTD约束
1.关联DTD - 只能引入一种
内部关联:格式:<!DOCTYPE 根元素 [ 约束语法 ]>
外部关联:格式:<!DOCTYPE 根元素 SYSTEM "dtd文件">
公共关联:格式:<!DOCTYPE 根元素 PUBLIC "文件名称" "文件路径">
2.语法-元素
格式:<!ELEMENT 元素名称 (元素内容声明)>
? : 表示该元素可以出现,但是只能出现一次 <!ELEMENT books (book?)>
* : 表示该元素允许出现任意多次,也可以零次 <!ELEMENT books (book*)>
+ : 表示该元素最少出现一次,可以出现多次 <!ELEMENT books (book+)>
() : 用来给元素分组 <!ELEMENT book (name,price)>
| : 表示列出的元素中选择一个 <!ELEMENT book (name|price)>
, : 表示元素必须按照指定的顺序出现 <!ELEMENT book (name,price)>
EMPTY : 如果一个元素的CONTENT 被声明为EMPTY,那么该元素不能包含任何子元素和文本,仅可以使用属性 <!ELEMENT name EMPTY>
ANY : 表示该元素中可以包含任何在DTD中定义的元素内容 <!ELEMENT name ANY>
#PCDATA : 表示该元素可以包含任何字符数据,但是不能在其中包含任何子元素 <!ELEMENT name #PCDATA>
3.语法-属性
格式:<!ATTLIST 元素名称 [属性名称 属性类型 约束].. >
<!ATTLIST book
id ID #REQUIRED
city (北京|上海|广州) "上海" //这个在浏览器没有展示???
company CDATA #FIXED "sun" //这个在浏览器没有展示???
>
#REQUIRED 必须存在的属性
#IMPLIED 可以为空
#FIXED "value" 固定值
Defaultvalue 默认值
设置固定值,方便xml中被引用:设置:<!ENTITY bookVal "java Core"> xm中引用:<title>&bookVal;</title> 这样还可以直接引用一个xml中所有内容
设置固定值,方便dtd中被使用:设置: <!ENTITY % bookInfo "price,name"> dtd中引用:<ELEMENT book (title,%bookInfo;)>

    属性类型
    ID 唯一标识
    CDATA 字符数据
    IDREF 引用已有的唯一标识

Schema约束
1.本身就是一个xml文件,扩展名xsd扩展名xsd (xml schema document)
2.必须有一个根节点,叫Schema
3.是一套预定义的xml元素和属性创建的
4.在eclipse中新建一个xml schema文件即可。
5.新建后添加别名xs: 这个出处 <xs:schema xmlns:xs="">

关联schema - 重点
xmlns : 引用命名空间(xsd的targetNamespace)
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
官方规定 - 用于实例化
xsi:schemaLocation="http://www.example.org/schematest schematest.xsd"
两个参数
1.引用schema名称
2.schema文件位置

schema语法
complexType 复合类型(复杂类型)
sequence 顺序出现 minOccurs最少几个,maxOccurs最大几个
choice 选择出现
all 没有顺序出现,必须全部都在

    simpleContent 简单类型
        extension 扩展
        restriction 约束(限制条件)

四种复杂类型
1.空元素
2.包含其它元素的元素
3.仅包含文本的元素
4.包含元素和文本的元素

案例:
1.仅含有属性的空元素 <attribute name="src"></attribute>
2.仅含有属性的空元素,属性必须写 <attribute name="src" use="required"></attribute>
optional 可选
required 必须
prohibited 禁用
2.仅含有属性的空元素,属性必须写,并且规定值的类型<attribute name="src" use="required" type="integer"></attribute>
3.必须含有属性的非空元素

schema自定义类型
<xs:simpleType name="string">
<xs:restriction base="xs:string">
<xs:pattern value="\d{6}-\d{8}-\d{4}"></xs:pattern>
</xs:restriction>
</xs:simpleType>
需要用自己的命名空间引用:<xs:element name="books" type="tns:string"></xs:element>
tns是自己的命名空间

注意:
xmlns : 引用命名空间
xmlns:tns : 是对命名空间起一个叫 tns 的别名
xmlns:xsi :值是固定写法 http://www.w3.org/2001/XMLSchema-instance,每一个xml都要有
xsi:schemaLocation : 是命名空间的位置
targetNamespace : 命名空间

xml解析
1.DOM解析 ,全部加载到内存。
获得工厂实例 DocumentBuilderFactory
通过工厂获得解析器实例 DocumentBuilder
通过解析器 Document
解析xml 根元素getDocumentElement,子元素getElementsByTagName,属性getAttributes
2.SAX解析
获得工厂实例 SAXParserFactory
创建解析器 SAXParser
创建解析Handler DefaultHandler(startDocument,endDocument,startElement,endElement,characters)
解析xml 注意:文本值的赋值需要全局变量注意清空全局变量
从Handler中获得解析的集合 开放get方法
3.Dom4j解析
获得解析器 SAXReader
解析获得Document对象 Document
获得根元素 getRootElement()
获得所有子元素 elements()
遍历所有子元素 多层for循环遍历
4.Dom4j-xpath查询
5.Dom4j-curd

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容

  • 1. XML总结 1.1. XML简介 XML : 可扩展的标记语言。(和HTML非常类似的) 可扩展的。 自定义...
    Ethan_Walker阅读 2,828评论 0 12
  • 1. XML简介 以下内容来自于http://www.w3school.com.cn/xml 基本知识 XML 和...
    WebSSO阅读 1,726评论 1 7
  • 一、绪论 上周工作需要了解项目的一些大体内容,结果在xml解析这一块看的迷迷糊糊的,所以在这里把学习到xm...
    cao健强阅读 3,926评论 1 7
  • Xml Schema的用途 1. 定义一个Xml文档中都有什么元素 2. 定义一个Xml文档中都会有什么属性 ...
    _东邪_阅读 2,198评论 2 4
  • 1 XML解析No29 【 XML:可拓展标记语言,语言和HTML类似,也是一种标记语言。 特点:标记是自定义...
    征程_Journey阅读 1,527评论 0 9