Xpath,XQuery,DTD
一、Xpath
XPath 是一门在 XML 文档中查找信息的语言;XPath 是 XSLT 中的主要元素。XPath是W3C标准。
1、七种类型节点:元素、属性、文本、命名空间、处理指令、注释、文档节点;
2、节点关系(轴)
parent 当前节点的父节点;
child 当前节点的所有子节点;
ancestor 当前节点的所有上级节点(父、祖父...);
ancestor-or-self 当前节点的所有上级节点及节点本身;
descendant 当前节点的所有下级节点(子、孙...);
descendant-or-self 当前节点的所有下级节点及本身;
preceding-sibling 当前节点之前的所有同级节点;
following-sibling 当前节点之后的所有同级节点;
following 当前节点之后的所有节点;
preceding 当前节点之前的所有节点;
namespace 当前节点的所有命名空间节点;
attribute 当前节点的所有属性;
self 当前节点;
3、选取节点方法:
nodeName 选择此节点的所有子节点;
/ 从根节点选取;
// 从匹配选择当前节点选择文档中的节点,而不考虑它们的位置;
. 选取当前节点;
.. 选取节点的父节点;
@ 选取属性;
* 匹配任何元素节点;
@* 匹配任何属性节点;
node() 匹配任何类型的节点;
name1|name2 选取所有name2和name1元素;
4、谓语
用来查找某个特定节点或者包含某个指定的值的节点,谓语被包含在方括号中;例:
nodeName[1] 选取nodeName的第一个元素; nodeName[last()] 选取最后一个元素; nodeName[position()<3] 选取前两个元素; nodeName[@lang] 选择属性有lang的nodename元素; nodeName[@lang='eng'] 选择属性lang的值为eng的元素; nodeName[price>30] 选取所有其中price元素大于30的nodeName元素;
5运算符:
+,-,*,div(除),mod(取余),=,!=,<,<=,>,>=,or,and
二、XQuery
1、XQuery 之于 XML 作用就类似于 SQL 之于数据库的作用,是用来查询XML数据,可以用来查询任何XML形态呈现的数据(包括数据库)
2、XQuery使用谓语来限定从文档所提取的数据;
3、XQuery对大小写敏感,其中的字符串可使用单引号或双引号;
4、变量由$并跟随一个名称来进行定义;
5、 :注释:
6、通用比较:=,!=,<,<=,>,>=;
值的比较:eq,ne,lt,le,gt,ge
7、doc("name.xml") 使用此函数来提取XML文档中的数据;
查询示例:doc("books.xml")/bookstore/book[price>30]/title 选取bookstore元素下所有的title元素,且price元素值大于30;
使用FLWOR进行排序(for let where order by return):
for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
8、使用data()函数来将获取到的数据展示出来
向html元素插入查询到的元素示例:
<ul> { for $x in doc("books.xml")/bookstore/book order by $x/title return <li>{data($x/title)}. Category: {data($x/@category)}</li> } </ul>
9、自建函数格式
declare function 前缀:name($para as datatype)
AS 返回数据类型
{ }
三、DTD
1、DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块,可被声明于XML文档中,也可作为一个外部引用;
2、所有XML文档构成的模块:元素、属性、实体、PCDATA、CDATA
3、实体引用:<,>,&,",&apos
4、元素声明:
<!ELEMENT element-name category> 或 <!ELEMENT element-name (element-content)> <!ELEMENT element-name EMPTY> 空元素 <!ELEMENT element-name(#PCDATA)> 只有PCDATA的元素 <!ELEMENT element-name ANY)> 带有任何内容的元素 <!ELEMENT element-name (childname1,...)> 带有子元素的元素 <!ELEMENT element-name (childname+)> 子元素最少出现一次 <!ELEMENT element-name (childname*)> 子元素出现一次或多次 <!ELEMENT element-name (childname?)> 子元素出现0次或一次 <!ELEMENT element-name (childname1|childname2)> 或
5、属性声明
<!ATTLIST element-name attribute-name attribute-type attribute-value>
属性类型(attribute-type):
CDATA 字符数据 (va1|va2|...) 枚举 ID 唯一的ID IDREF 值为另一个元素的ID IDREFS 值为ID的列表 NMTOKEN 合法的XML名称 NMTOKENS 合法的XML名称列表 ENTITY 实体 ENTITYS 实体列表 NOTATION 符号的名称 xml: 值是一个预定义的XML值
属性值(attribute-value):
一个值 给定的默认值
#REQUIRED 必填
#IMPLIED 非必填
#FIXED value 属性值是固定的
6、实体(用于定义引用普通文本或特殊字符的的快捷方式的变量,实体引用是对实体的引用)
实体可在内部和外部声明
<!ENTITY entity-name "entity-value"> 内部声明
<!ENTITY entity-name SYSTEM "URL"> 外部声明
示例:
DTD
<!ENTITY writer "This is a writer">
<!ENTITY copyright "I do not care what it is">
XML实例:
<author>&writer;©right;</author>
7、验证(javascript)
示例:
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.validateOnParse="true"; //值设为false就可以关闭验证 xmlDoc.load("note_dtd_error.xml"); document.write("<br />Error Code: "); document.write(xmlDoc.parseError.errorCode); document.write("<br />Error Reason: "); document.write(xmlDoc.parseError.reason); document.write("<br />Error Line: "); document.write(xmlDoc.parseError.line);