实体引用
1 | # < < |
CDATA 区
1 | <![CDATA[ 内容 ]]> |
命名空间
xmlns:<name>=<"uri">
<name>:命名空间前缀
<"uri">:命名空间 URI 的字符串
1 | <f:table xmlns:f="http://www.w3.org/furniture"> |
XML 解析模式
1.流模型 分为:“推”,“拉”两种变体
“推”模型,SAX是事件驱动模型
2.DOM(文档对象模型)
建立树状结构的方式访问XML文档
区别:
DOM需要加载整个文档和构造层次结构才能工作
DOM内存持久,SAX一次性处理
DOM处理文档编码方便,SAX很难同时访问同一个文档的多处不同数据
.NET 支持 “拉”模式,通过 XMLTextReader 类实现,不支持 SAX
DOM 允许编辑更新XML,可以随机访问文档数据,可以用Xpath查询
XSLT 转换只能输出纯文本文档
位置、步
绝对位置路径:/step/step/…
相对位置路径:step/step/…
步的语法:轴名称::节点测试[谓词]
轴名称:ancestor、ancestor-or-self、attribute、child、descendant、descendant-or-self、following、namespace、parent、preceding、preceding-sibling、self
节点测试:识别某个轴内部的节点
Xml 结构
1 | <father lang="en"> Tom Smith |
Xpath 操作
1 |
|
总结:
Xpath 是一种表达式,返回值可以是节点、节点集合、原子值,以及节点和原子值的混合等
节点类型:元素、属性、文本、命名空间、处理指令、注释、根节点
节点关系:父 Parent、子 Children、兄弟 Sibling、先辈 Ancestor、后代 Descendant
Xpath 采用内嵌条件判断语句,解决Xpath路径无法唯一的确认XML节点
Xpath 路径字符串中使用 [] 包含逻辑表达式,谓词被嵌套在方括号中
通配符:* node() @*
Xpath 函数
数值:number、ceiling、floor、round
字符串:string、concat、substring、string-length、normalize-space、translate、contains、starts-with、ends-with、
substring-before、substring-after
上下文:position、last
节点函数:name、local-name
布尔值函数:boolean、not、true、false
其它:测试序列容量的函数、QNames相关的函数、合计函数、生成序列的函数等
XSLT 应用
XSLT 转换过程:
1.创建 XML 文件
1 |
|
2.创建 XSLT 文件
1 |
|
3.XML 引用 XSL 文件
1 |
|
XSLT 语法:
<xsl:template>和<xsl:apply-templates>
模板由两部组成:匹配模式和执行
<xsl:template> 定义模板,
<xsl:apply-templates> 用来执行哪一个节点被模板具体处理,可以理解为程序中调用子函数。<xsl:apply-templates> 总是嵌套在 <xsl:template> 元素内
1 | <xsl:template match=Xpath name=qname priority=number mode=qname> |
<xsl:value-of>和<xsl:copy-of> 选取XML元素以及把它添加到已被转换的输出流
1 | <xsl:template match=pattern name=qname priority=number mode=qname> |
<xsl:for-each> 允许在XSLT里使用循环语句
1 | <xsl:template match=pattern name=qname priority=number mode=qname> |
<xsl:sort> 节点集合分类,排序
1 | <xsl:template match=pattern name=qname priority=number mode=qname> |
<xsl:if> 条件判断语句
1 | <xsl:template match=pattern name=qname priority=number mode=qname> |
<xsl:choose> <xsl:when> <xsl:otherwise> 多条件判断语句
1 | <xsl:template match=pattern name=qname priority=number mode=qname> |
.NET XslCompiledTransform 类,命名空间 System.Xml.Xsl,接受 XML 数据并将其转换成多种形式
XSLT 传递参数:
XSLT 文件中定义参数变量,能够接受外部传入的具体值。.NET XsltArgumentList 类可以获得这些值集合
1 | <!-- 定义参数变量 --> |
应用扩展对象:
1 | <!-- 定义 命名空间 mObj--> |
XML 验证
XML 目的:存储和交换数据
XML 验证目的:保证所有的 XML 文档结构一致
两种方法:DTD模式、XML Schema
区别:
DTD基于正则,描述能力不够;没有数据类型的支持;约束定义能力不足,无法对 XML 文档作出更细致的语义限制;结构不够结构化;没有标准的编程接口
XML Schema基于XML,支持数据类型,可扩展的数据模型,支持综合命名空间,属性组
XML 应用 DTD:
内部 DTD、外部 DTD:<!DOCTYPE customers SYSTEM "Customers.dtd">
XML 应用 XSD Schema:
XML 根元素 包含 xmlns:xsi,xsi:(schemaLocation|nonamespaceschemaLocation )
XSD 声明中添加 targetNamespace 指定目标名字空间
XML Schema 创建:
编辑文本方式、VStudio 设计器、模式对象模型(SOM),编程方式
XML Schema 文档:
1 | <!-- XML Schema 文档 --> |
XSD 文档至少包含:schema 根元素(唯一)和XML模式命名空间的定义、元素定义
1 | <!-- schema 根元素 --> |
应用元素、替代、组合器:
1 | <!-- schema 根元素 --> |
属性:default、fixed、name、ref、type、use、form、id
<xsd:attribute name="age" type="xsd:integer"/>
xsd:attribute 必须是 schema、complexType、attributeGroup 元素的子元素,要把属性添加到元素上,属性应该在 complexType 定义的组合器后定义或应用
Schema 数据类型:
约束:
enumeration、fractionDigit、length、(min|max)(Exclusive|Length|Inclusive)、pattern、totalDigits、whiteSpace
简单类型:
simpleType 不能包含元素、属性,只能是值、值得集合
列表类型:
list
联合类型:
union
复杂类型:
complexType
内容模型:
any empty mixed
1 | <!-- 定义 simpleType 简单类型 --> |
XMLReader 类验证 XML
XMLDocument 类验证 XML
XPath 导航器验证 XML
验证未声明 XSD Schema 模式文件位置的 XML
ValidationEventHandler 事件实例 -关联-> 处理函数 ValidationEventHandler() -> XmlDocument类 -> Validate()