一、 XML 简介
XML 即可扩展标记语言( EXtensible Markup Language ),是一种标记语言,很类似 HTML 。 XML 的设计宗旨是传输数据,而非显示数据。 XML 标签没有被预定义,需要用户定义标 签。 XML 被设计 为具有自我描述性并符合 W3C 的推荐标准。
XML 已经被广泛的应用于软件开发的很多方面,特别是 Web 开发。常用于简化数据的存储和共享。
二、 XML 语法
1) 可以根据应用编写有实际意义的标签
比如要描述班级可以定义 <Class> 标签,要描述学 生可以定义 <Student> 标签。
2) 所有 XML 标签必须 有关闭标签,如:
<Class> 高三一班 </Class>
</Class> 是关闭标签;再如:
<Student> 高三一班 </Student>
</Student> 是关闭标 签。
3) XML 标签也是区分大小写的:
<Class> 高三一班 </class>
上面写法是错误的,因为 <Class> 和 </class> 是不同的标 签, </class> 是 <class> 的关闭标签,而不是 <Class> 的关闭标签。
3 ) XML 标签是可以嵌套的,而且必须正确嵌 套,所谓嵌套也就是在其内的意思,把握这一点就不难看出一下哪个是错误的了,正确的写法如下:
<Class>
<Student>
</Student>
</Class>
错误的写法:
<Class>
<Student>
</Class>
</Student>
在编写 XML 代码时,注意保持清晰地层次结构。
4) XML 必须有根元素,根元素有且只能有一个
<Root>
<Child>1</Child>
<Child>2</Child>
<Child>3</Child>
</Root>
5) 可以给 XML 标签定义属性,属性值必须放在英文半角双引号里面。
<Class Name=” 高三一班 ”>
<Student>
</Student>
</Class>
下面属性是错误的:
<Class Name= 高三一班 >
<Student>
</Student>
</Class>
6) 实体引用
如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。
这样会产生 XML 错误:
<message>if salary < 1000 then</message>
为了避免这个错误,请用一个实体引用 来代替 "<" 字符:
<message>if salary < 1000 then</message>
在 XML 中,有 5 个预定义的实体引用:
< |
< |
小于 |
> |
> |
大于 |
& |
& |
和号 |
' |
' |
单引号 |
" |
" |
引号 |
7) XML 中的注释
<!-- This is a comment -->
8) XML 中的空格会被保留,不会被删减。
9) XML 命名规则
XML 元素必须遵循以下命名规则:
r 名称可以含 字母、数字以及其他的字符
r 名称不能以数字或者标点符号开始
r 名称不能以字符 “xml” (或者 XML 、 Xml )开始
r 名称不能包含空格
r 可使用任何名称,没有保留的字词。
三、 XML 验证
XML 文档需要遵循下面几点:
r XML 文档必须有根元素
r XML 文档必须有关闭标签
r XML 标签对大小写敏感
r XML 元素必须被正确的嵌套
r XML 属性必须加引号
为了确保 XML 文档是“合法”,用 DTD (文档类型定义)进行了验证。 DTD 的作用是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:
<!DOCTYPE Student [
<!ELEMENT Student (Name,Age)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Age (#PCDATA)>
]>
验证时的使用方法:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Stude SYSTEM "Student.dtd">
<Student>
<Name>Tom</Name>
<Age>25</Age>
</Student>
也可以将 DTD 生命于 XML 文档中:
<?xml version="1.0"?>
<!DOCTYPE Student [
<!ELEMENT Student (Name,Age)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Age (#PCDATA)>
]>
<Student>
<Name>Tom</Name>
<Age>25</Age>
</Student>
关于以上 DTD 解释如下:
!DOCTYPE Student ( 第二行 ) 定义此文档是 Student 类型的文档。
!ELEMENT Student ( 第三行 ) 定义 Student 元素有二个元素: "Name,Age"
!ELEMENT Name ( 第四行 ) 定义 Name 元素为 "#PCDATA" 类型
!ELEMENT Age ( 第五行 ) 定义 Age 元素为 "#PCDATA" 类型
PCDATA
PCDATA 的意思是被解析的字符数据( parsed character data )。
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文 本。
PDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展 开。
不过,被解 析的字符数据不应当包含任何 & 、 < 或者 > 字符;需要使用 & 、 < 以及 > 实体来分别替换它们。
CDATA
CDATA 的意思是字符数据( character data )。
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
XSLT 是首选的 XML 样式表语言。
XSLT (eXtensible Stylesheet Language Transformations) 远比 CSS 更加完善。
使用 XSLT 的方法之一 是在浏览器显示 XML 文件之前,先 把它转换为 HTML
本文对 XSLT不算详细介绍,请读者查阅 XSLT相关书籍资料。
四、 编写 XML 文档
.NET System.XML 命名空间下提供的一些类库使得开发人员可以很方便 的对 XML 进行 读、写、查。
XmlTextWriter 类允许你将 XML 写到一个文件中去。这个类包含了很多方法和属性,使用这些属性和方法可以使你更容易地处理 XML 。下表是 XmlTextWriter 的方法:
方法名 |
功能描述 |
WriteStartDocument |
版本为 “1.0” 的 XML 声明 |
WriteEndDocument |
关闭任何打开的元素或属性 |
Close |
关闭此流和基础流 |
WriteDocType |
写出具有指定名称和可选属 性的 DOCTYPE 声明 |
WriteStartElement |
写出具有指定的本地名称的 开始标记 |
WriteEndElement |
关闭任何打开的元素或属性 |
WriteFullEndElement |
关闭一个元素,并且总是写 入完整的结束标记 |
WriteElementString |
写出包含字符串值的元素 |
WriteStartAttribute |
书写属性的起始内容 |
WriteEndAttribute |
关闭上一个 WriteStartAttribute 调用 |
WriteRaw |
手动书写原始标记 |
WriteString |
书写一个字符串 |
WriteAttributeString |
出具有指定值的属性 |
WriteCData |
写出包含指定文本的 <![CDATA[...]]> 块 |
WriteComment |
写出包含指定文本的注释 <!--...--> |
WriteWhiteSpace |
写出给定的空白 |
WriteProcessingInstruction |
写出在名称和文本之间带有 空格的处理指令,如下所示: <?name text?> |
下例是用 XmlTextWriter 类写的一个简单 XML 文档:
运行后,会在项目根目录 /bin/debug 文件夹下生成 demo.xml ,代码如下:
下面例子,我们增加一些 XmlTextWriter 类中的方法的应用:
运行代码后生成的 XML 文件代码如下:
五、 XML 读、查、删
上面我们学习了用 XmlTextWriter 对象创建一个 XML 文档,在本节里,将继续介绍如何在已 有 XML 文档中查 询和插入节点。下面示例在 book.xml 根节点下加入新的 <Book> 节点:
运行代码后, book.xml 代码如下,加粗部分是新增的代码:
下面示例演示了如何修改 XML 节点:
如果要输出 book.xml 文档中所有节点的属性和值,可以尝试在上例 foreach 中实现。运行后, book.xml 的代码如下,原来的“ C# ”被更改为了“精通 C# ”。
如果要删除节点属性请使用 RemoveAttribute 方法,如果要删除节点请使用 RemoveChild 方法,也可以使用 RemoveAll 方法删除所有节点。关于这类方法的使用不再赘述。
另外DataSet也可以读写XML文件:
将字符串保存为XML文件
C#创建XML文档、增删节点类:
转载:http://www.cnblogs.com/Ferry/archive/2009/07/26/1531223.html