标签:
linux下xml编辑器
vim
gedit
editix wonderful;免费30天;可以进行有效性检查
xerces
oxygen 收费
xmlcopyedit
serna free 是serna的免费版本,开源
xml 库文件
libxml c语言使用它解析xml http://wangjiajun53880.blog.163.com/blog/static/1170013942010119558319/
expat Expat 是一个用C语言开发的、用来解析XML文档的开发库,它最初是开源的、Mozilla 项目下的一个XML解析器
xml文档结构(标记和字符数据)
序言
XML声明 通常以声明开始(非必需,有则必须放在文档开始的地方)<?xml version="1.0" encoding="utf-8"? standalone="yes"?>是否依赖外部DTD
PI 处理指令,<?xml-stylesheet type="text/xsl" href="/home/Wizard/my.xsl"?>
注释
DTD/样式
文件类型声明
文档节点
标签
元素 根元素是唯一的;元素的内容可以解析空格,不能包含有特殊意义的字符,用实体代替;元素的嵌套很严格
属性 attribute,可以包含在标记中,属性的值必须用引号括起来,属性名和属性值必须成对出现,属性名不能重复,属性值不能包括特殊字符“ < > "&”;避免使用属性,不好解析、扩展
文本
CDATA 在一个块内,用<![CDATA[ ……]]>把内容包住,使在该块中可以不用xml实体。
实体
注释 <!-- -->,不能在注释中出现“--”,不能嵌套,不能出现在标记中
结构良好的XML文档不一定是有效的文档,但有效的文档一定是结构良好的文档。XMl规范性通过XML语法规则来保证,XML文档的有效性是指XML文档内容中的元素、属性符合其他文档内容(DTD Schema)的定义。利用专用的文档类型定义和专用的解析器可以验证一个XML文档的有效性。
命名规则
不能以数字或标点开始
不能以xml,Xml,XML开始
不能包含空格
默认值系统自动分配,不可更改;缺省值也是系统自动分配,可以更改。
多个单词为一个词时第一个单词首字母不大写,后面的单词首字母大写(自定义)。
DTD 文档类型定义(document type definition)
形式为<!DOCTYPE rootelement[...body...]>(指示解析器),XML文档必须和一个DTD一起使用,且必须放在文档开头。
在文档中定义DTD直观且不用担心XML处理器找不到DTD,但是会是文档臃肿,DTD文档不易分享。
外部DTD定义
包含body部分。
引用
系统标识符引用外部 DTD <!DOCTYPE rootelement SYSTEM "url">
公共标志符<!DOCTYPE rootelement PUBLIC "DTD_name" "url">;这个DTD名字是一个正是公共标志符。
正式公共标志符
-//Owner//class Description//Language//Version
例如网页的文档类型声明:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
DTD文档结构
第一行是声明部分,格式与XML文档的声明语法共同。
注释和XML文档相同。
<!ELEMENT...> 定义元素
<!ATTLIST...> 定义属性
<!ENTITY...> 定义实体
<!NOTATION...> 定义符号
彼此独立,无需嵌套,验证有效性时和元素在DTD中声明的顺序无关。
元素内容的类型
字符串
用(#PCDATA)定义的元素不再包含其他子元素。 <!ELEMENT name (#PCDATA)>
ELEMENT型
设定元素拥有的子元素和出现的次数和顺序。
有序子元素:<!ELEMENT name (child1, child2, child3...)>,元素名和子元素之间有空格。
互斥子元素:<!ELEMENT name (child1 | child2 | child3...)>,必须选一个元素,例如<!ELEMENT universal (ice, human, (cat | dog))>
子元素出现的频率:‘+’至少出现一次,‘*’出现任意多次,‘?’出现0次或1次,‘none’只能出现一次。例如<!ELEMENT universal (earth+)>
组合子元素:<!ELEMENT universal (human | (love,bread))>
无序子元素:<!ELEMENT universal ((human | love | water)*>
空元素
没有内容,但可以有属性。
格式:<!ELEMENT name EMPTY>,XML文档中元素格式必须是<.../>而不能是<...></...>
ANY元素
元素可以有任何类型的子元素或纯文本或空,但是出现在XML文档中的元素必须在DTD中定义。
格式:<!ELEMENT name ANY>
MIXED型
允许混合内容使得字符数据和其他元素能在元素中共存,其子元素出现无序,次数不限,不能用表示频率的符号修饰,#PCDATA必须放在最前面。
<!ELEMENT universal(#PCDATA | human | love)*>
元素属性声明
<!ATTLIST E_name A_name type D_value> 元素名 属性名 属性类型 默认值
<!ATTLIST 学生
姓名 CDATA #REQUIRED
性别 (男 | 女) "男"
联系方式 CDATA #IMPLIED> 一个元素可有多个属性,声明次序无关(可位与声明元素的前面),所有元素的属性都要在各自对应的标记中声明;属性有4中不同类型的默认值;属性有10种不同的类型,由TYPE指定。
属性的默认值:default(一个预设的字符串,如上面的性别); #REQUIRED属性值必须指定; #IMPLIED可指定可不指定; #FIXED属性值是一个固定值(必须是指定的值,定义元素时如果没有定义这个属性,则默认拥有这个属性),<!ATTLIST BOOK CATRGORY CDATA #FIXED “计算机“。
属性的类型: CDATA 字符数据; Enumerated 枚举类型("男" | "女") ,从枚举列表中选择一个值; ID 识别XML文档中元素唯一性的属性; IDREF 对某些具有 ID 属性的元素的引用,这些元素的ID属性值必须与 IDREF 的属性值相同; IDREFS 有空格分开的若干个 ID ; ENTITY 在 DTD 中声明的实体; ENTITIES 若干个以空格分开的ENTITY名称; NMTOKEN 名称标号(合法的XML名称); NMTOKENS 若干空格分隔的 NMTOKEN ;NOTATION 指定属性值为 DTD 中声明的记号名。
XML实体
五种所有XML解析器必须实现的实体:“&apos ‘”,“& &”,“" "”,“< <”,“> >”。
实体可在XML文档和DTD中使用。
定义:<!ENTITY Entity_name "Replacement">
使用:&Entity_name;
外部实体
<!ENTITY Entity_name SYSTEM(PUBLIC) "URL">,一般为整个文件,PUBLIC表示网络上的文件。
内部参数实体
指在独立的外部DTD文档内定义和使用的实体,只能在DTD文档中使用。
定义:<!ENTITY % Entity_name "Replacement">
引用:%Entity_name;
外部参数实体
指在独立的外部DTD文档定义和使用的实体,外部参数实体用于将多个独立的DTD文档组合成一个大的DTD文档。
定义:<!ENTITY % Entity_name SYSTEM "URL">
引用:%Entity_name;
注意
不能在元素及属性的声明中引用实体。
语句中不能出现循环。
引用外部实体时文档中的standalone不再是默认值“yes”,而应该设为“no”。
如果引用外部实体文档的编码不是utf-8或unicode,必须有XML声明。
XSD
XML模式(XML Schema [ Definition ])模式可以和DTD相互替代,并且功能更强大。模式使用XML格式编写,格式是基于xml语法的,本身是XML的一个应用,支持命名空间和数据类型。
根元素:<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"></xs:schema> 表明文档类型,声明命名空间(必须),版本信息,语言信息等,只有一个根元素
引用XML Schema 文档 通过定义命名空间
<sweater xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:myns="http://www.yulaoqiannian.com/XMLSchema" xsi:SchemaLocation="http://www.yulaoqiannian.com/XMLSchema sweater.xsd" ></sweater>
前一个地址是声明命名空间,后一个指明验证的Schema文件的地址,在 xsd 文档中必须声明 sweater 元素。
xsi:noNamespaceSchemaLocation 用于没有目标命名空间的模式文档,属性的值是一个单一的值,用于指定模式文档的位置
xsi:SchemaLocation 用于有目标命名空间的模式文档,属性的值是由一对或多对 URL 引用对组成,两个URL以空格分开,URL引用对页用空格分开;第一个URL指明名称空间的名字,第二个URL指明模式文档的位置
对局部元素的限定
elementFormDefault 为 qualified 表示被限定,为 unqualified 表示未被限定;限定时在实例 XML 文档中使用局部元素和局部属性必须引用命名空间,默认人非限定。
attributeFormDefault 为 qualified 表示被限定,为 unqualified 表示未被限定。
对局部元素和属性限定直接在 element 和 attribute 加上属性 form 来限定。
元素类型
xs:string 最松散的文本约束,仅仅要求不能出现特殊字符
xs:int(eger) 必须为数值
xs:double
xs:decimal
xs:boolean true false
xs:date YYYY-MM-DD
xs:time
xs:token
两种主要的数据结构
用他们来定义新的数据类型。
simpleType 只能包含数据,restriction minLength manLength minExclusive manExclusive
complexType 可以包含其他元素,属性
命名的简单类型:必须在全局定义,且名称唯一,按名引用。
匿名的简单内型:作为子元素定义在元素内部
简单类型
定义
<simpleType name="名字">
<restriction base="类型">
......
</restriction>
</simpleType>
限制条件
<Length value="非负数"/> 指定字符串的长度
<minLength value="非负数"/> 指定字符串的长度的最小长度
<maxLength value="非负数"/> 指定字符串的最大长度
<minInclusive value="数值"/> 指定数值的最小值
<maxInclusive value="数值"/> 指定数值的最大值
<minExclusive value="数值"/> 排除比数值小的值
<maxExclusive value="数值"/> 排除比数值大的值
<fractionDigits value="数值"/> base="xs:decimal"
简单类型的种类
原子类型 具有不可分割的值
列表类型list 值是用空格分隔的原子类型的列表
联合类型union 值可以是原子类型,也可以是列表类型,这种类型是两种或两种以上其他简单类型的值空间的集合
列表类型list
<xs:simpleType name="size">
<xs:list>
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="2"/>
<xs:maxInclusive value="18"/>
</xs:restriction>
</xs:simpleType>
</xs:list>
</xs:simpleType>
枚举型 enumeration 一组简单类型的选项
<xs:simpleType name="enumName"> <!--使用 enumName 使用这个类型-->
<xs:restriction base="xs:string">
<xs:enumeration value="枚举值"/>
<xs:enumeration value="枚举值"/>
...
</xs:restriction>
</xs:simpleType>
复杂类型
四种不同的内容内型
简单内容类型 只允许有字符数据,可以包含属性 complexType -> simpleContent -> extension -> attribute
纯元素类型 只允许有子元素 sequence
混合类型 允许有字符数句和子元素,定义时给 complexType 的属性 mixed="true"
空类型 不允许有字符数据和子元素
sequence 组用来表示组内定义的元素在XML文档中应该按照组内定义的顺序出现 complexType -> sequence
choice 组描述的元素只能选择一个子元素 complexType -> choice
使用 choice 的 minOccurs 和 maxOccurs 属性可以使 choice 中的元素以任何次数、顺序出现。
all 组表示所有的元素都要出现,且只能出现依次,出现顺序任意 complexType -> all
元素声明
<xs:element name="" type=""/> 声明一个在XML文档中使用的元素
简单元素 只包含文本的元素
<xs:element name="元素名字" type="类型参数" default="默认值" fixed="固定值" minOccurs="最少出现次数" maxOccurs="最多出现次数" ref="一个已经以全局形式声明的元素" /> minOccurs和maxOccurs不能精确控制元素出现的次数,默认出现一次,maxOccurs="unbounded"表示出现无限次;default和fixed不能同时出现;
全局元素是 schema 下的元素,局部元素是 all, choice, sequence 下的元素。
元素类型的定义
引用命名数据类型 新类型定义在元素定义外面(可见域)
匿名定义的数据类型 新类型定义在元素定义内部
ANY元素数据类型 不指定 type, simpleType, complexType;可以有任何子元素,纯字符,属性(不能混合出现)
属性声明
<xs:attribute name="" type=""/> 类型和元素类型一样
<xs:attribute name="名字" type="类型" default="默认值" fixed="固定值" use="optional | prohibited | required" ref="一个已声明的全局属性"/> 定义 use 时不能将属性定义为全局的
属性的类型
通过type指定内值类型和用户自定义类型
通过simpleType指定匿名类型
不指定时默认是 anySimpleType ,可以是任意类型
命名空间 XML命名空间提供了一种可以把元素、属性、名字和URL地址引用相互关联的方法。
默认的命名空间声明(没有名称)<cat xmlns="http://www.yulaoqiannian.com/namespace"></cat>
在一个缺省的命令空间中,URL可以为空,这在直接方式命名空间声明中是不允许的;当URL为空时,在声明作用域范围内没有前缀的元素被认为不在任何命名空间中。
元素的属性中不能有两个命名空间相同,且属性名相同的两个属性。
声明的一般形式
xmlns:前缀="URL"
隐式声明默认命名空间 一个文档中只能由一个隐式声明的命名空间
xmlns="URL"
xsd 中命名空间
targetNamespace 声明指示该文档所在的命名空间
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tn="http://www.yulaoqiannian.com/XMLSchema" targetNamespace="http://www.yulaoqiannian.com/XMlSchema"></xs:schema>
默认情况下 xsd 文档中只有全局元素、属性和类型属于目标命名空间。
XSLT XSL 转换(XSL Transformations), 可将一种 XML 文档转换为另外一种 XML 文档,其中一种特例是把XML转换成HTML输出
XSL 扩展样式表语言(EXtensible Stylesheet Language),它的初衷是给xml提供样式显示。由 XSLT 、 XPath 以及 XSLF 组成XSLT的主旨更一般化,指可将一种 XML 文档转换为另外一种 XML 文档,常把XSLT称为XLS。
CSS 层叠样式表单(Cascading Style Sheets)CSS 样式单可以为XML文档添加显示信息
引用 XSL 文档
<?xml-stylesheet type="text/xsl" href="welcome.xsl"?>
声明 XSL 文档
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"></xsl:stylesheet>
XMLT 本身也是 XML 文档,根元素的命名空间为 http://www.w3.org/1999/XSL/Transform 。
在 XMLT 根元素声明为 <xsl:stylesheet> 和 <xsl:transform> 完全一样。
节点类型 XML 文档被映射成一棵树
根结点(文档节点) 是文档树的根,其子元素为 XML文档的根元素、处理指令、注释等。
元素节点 <book>hello</book>
文本节点 字符数据,包括 CDATA 中的数据
属性节点 id="1"
命名空间节点
处理指令节点
注释节点
<xsl:template>
XSL 样式表由一个或多个被称为模板的规则组成,每个模板含有当某个指定的节点被匹配时应用的规则,模板先声明,然后在某个地方调用模板。
模板的声明
<xsl:template match="pattern" name="T_name"></xsl:template> T_name用于描述该模板的相关信息和名称
match 属性用于关联 XML 元素,他的值是 XPATH 表达式。
<xsl:template> 内部的内容定义了写到输出结果的 HTML 结果。
模板的调用
<xsl:template match="/"> 模板将在 XSLT 处理器遇到文档节点时自动处理。
其他模板在 <xsl:template match="/"> 模板中指定匹配路径的方式(使用 xsl:apply-templates)显示或隐式的调用。
根据模板名称使用 <xsl:call-template name="T_name"> 调用
<xsl:apply-templates select=""> 把一个模板应用到当前元素或当前元素的子元素,没有select属性时表示选择当前节点的所有子节点
<xsl:value-of> 提取某个选定节点的值,把值添加到输出流中
<xsl:value-of select="~~"></xsl:value-of>
select 值为一个 XPATH 值,为必选属性。
对文本节点和属性节点, xsl:value-of select="." 提取的是文本节点的内容和属性节点的取值。
对元素节点, xsl:value-of select="." 将得到该元素和其子元素的文本节点之和。
<xsl:for-each> 选取指定的节点集中的每个 XML 元素
<xsl:for-each select="~~">...</xsl:for-each>
select 值是一个 XPATH 表达式。
xsl:for-each 开始标记和结束标记之间是一个循环处理的过程体。
结果过滤 select="catalog/cd[year<‘1990‘]" =, !=, <, >
<xsl:if> 用于放置针对 XML 文件内容的条件测试
<xsl:if test="">...</xsl:if>
<xsl:sort> 对结果排序
<xsl:sort select="~~" data-type="~~" order="~~">
data-type text | number, 默认 text, 可选
order ascending | descending, 默认 ascending, 可选
<xsl:choose><xsl:when><xsl:otherwise> 结合起来表达多重条件测试
<xsl:choose>
<xsl:when test="test_1">
...
</xsl:when>
<xsl:when test="test_2">
...
</xsl:when>
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>
import include element attribute number param(参数)
XPath XML匹配模式(XML Pattern Matching)XPath是一种用于标识XML文档各个部分的语言。
这是一种为了XSLT 和 XPointer而设计出来的语言;含有超过 100 隔内建函数, 用于字符串值、数值、日期、时间比较、节点和 Qname 处理、序列处理、逻辑值等。
选取已知节点的表达式
nodename 选取此节点的所有子节点; nodename[1] 选取第一个 nodename 元素; nodename[last() - 1] 选取倒数第二个 nodename 元素; nodename[position() < 3] 选取前面两个 nodename 元素; book[price > 9] 选取子元素 price 大与 9 的 book 元素
/ 从根结点选取
// 选取文档中所有匹配的节点,不考虑他们的位置; //book[@price] 选取所有拥有属性 price 的元素; //book[@price="9"] 选取所有属性值 price 为 9 的 book 元素
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性; //@name 选取所有属性名位 name 的属性,不管他们的位置
* 匹配任何元素节点; //* 选取文档中的所有元素
@* 匹配任何属性节点; book[@*] 选取所有带有属性的 book 元素
node() 匹配任何类型的节点;
//book | //title 使用 "|" 选取若干路径,这里表示选择所有的 book 元素和 title 元素
轴 被定义成选取相对于当前节点的节点集
ancestor 当前节点的所有先辈
ancestor-or-self 当前节点的所有先辈和自己
attribute 当前节点的所有属性
child 当前节点的所有子元素
descendant 当前节点的所有后代元素
descendant-or-self 当前节点的所有后代元素和自己
following 当前节点结束标签后的所有节点
namespace 当前节点的所有命名空间的节点
parent 当前节点的父节点
preceding 当前节点开始标签之前的所有节点
preceding-sibling 当前节点之前的所有同级节点
self 当前节点
步( step )
包括
轴 定义所选节点和当前节点之间的关系
节点测试 识别轴内部的节点
0 或多个谓语 更深入的提炼节点集
语法
axis-name::node-test[predicate]
example
child::book 选取当前节点子元素的 book 节点
child::* 选取当前节点的所有子元素
child::text() 选取当前节点的所有文本子节点
child::node() 选取当前节点的所有子节点
child::*/child::price 选取当前节点的所有 price 孙节点
descendant::book 选取当前节点的所有 book 后代
ancestor::book
ancestor-or-self::book
attribute::price
attribute::*
运算符
| 计算两个节点集; //book | //cd
or price = 9 or price = 10
+ 6 + 4, 返回 10
-
*
div
= 返回 true/false
!=
<
<=
>
>=
核心函数库
函数:函数名 返回类型 参数
节点集函数
last() 返回一个称为上下文大小的数字,不同于最后一个节点
position() 返回一个称为上下文位置的数字,比如 position() = last() 测试
count(node-set) 返回实参节点集中的节点数
id(object) 返回一个节点集,根据在 DTD 中声明的 ID 类型唯一的选择元素
字符串函数
string() 把参数对象或上下文节点转换为字符串,合法的参数有节点集、数字、布尔值、或其他任何类型
concat() 参数为两个或更多字符串,返回字符串的连接
starts-with() 如果第一个字符串参数以第二个字符串开始则返回 true
contains() 如果第一个字符串参数包含第二个字符串参数返回 true
布尔函数
boolean() 不同于 0 或 NaN 的数字为 true ,非空的节点集或字符串为 true
not() 参数为 false 返回 true
true() 返回 true
false()
lang() 如果上下文节点的语言和参数指定的语言向相同或为子集,返回 true
数字函数
number() 把可选的参数对象转换为数字。布尔值 true 转换为 1 ,false 转换为 0 ;字符串转换为合理的数字;节点集先转换为字符串,再转换为合理的数字
sum() 对节点集参数中的所有节点应用 number() 函数后返回他们的和
floor() 返回不大于数字参数的最大数字
ceiling() 返回不小于数字参数的最小数字
round() 返回和数字最接近的整数数字
XLink XML链接语言(XML Linking Language)链接语言(The XML Linking Language ,XLink), 允许在不同的XML资源之间建立链接关系
XPointer XML指针语言(XML Pointer Language)XML指针语言(The XML Pointer Language ,XPointer), 标识XML文档的内部结构,例如元素、属性、内容等
DOM 对象式解析,文档对象模型(Document Object Model)DOM定义处理XML文档的接口、属性和方法,要将文件全部加载后生成树状的模型来处理文档
JDOM java特定文档模型,比使用DOM更快
DOM4J 合并超出基本XML文档的功能,集成了XPATH,XSD等
SAX 流式解析,XML的简单API(Simple API for XML)SAX 是另一种读取和操作XML文档的编程接口,使用顺序读取文档,读完后丢弃
Xquery 一种xml的查询语言,Xquery之于xml就像sql之于数据库。XQuery是基于XPath上的,单独的 XPath 位置路径本身就是有效的
XHTML 可扩展HTML(Extensible HTML)XHTML 使用XML重新定义了HTML 4.01的语法。XHTML 1.0是HTML的下一个版本
XDR 数据简化(XML Data Reduced)XDR是XML模式(XML Schema)的简化版本。IE5.0+浏览器支持XDR
XQL XMl查询语言(XML Query Language)XQL为存放XML文档中的数据提供一种便捷的查询语言
RELAX NG OASIS技术委员会开发的XML模式语言
标签:
原文地址:http://www.cnblogs.com/yulaoqiannian/p/5004931.html