从8月份开始陆陆续续的使用c#操作xml,现在做一个小结,一是梳理知识,二是做个备忘。
一个xml文档实例:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
第一行是XML声明。它定义XML的版本(1.0)和所使用的编码(ISO-8859-1)
下一行描述文档的根元素(root):<note>
接下来4行描述根的4个子元素(to,from,heading以及body)
最后一行定义根元素的结尾:</note>
XML文档形成一种树结构
XML文档必须包含根元素。该元素是所有其他元素的父元素。
XML文档中的元素形成了一颗文档树。这棵树从根部开始,并扩展到树的最底端。
所有的元素均可拥有子元素:
<root>
<child>
<subchild>......</subchild>
</child>
</root>
父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞。所有元素均可拥有文本内容和属性。
下面用一个例子来表示:
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="WEB">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
</bookstore>
例子中的根元素是<bookstore>。文档中的所有<book>元素都被包含在<bookstore>中。<book>元素中含有4个子元素:<title>、<author>、<year>、<price>。
XML元素
XML元素指的是从(且包括)开始标签到(且包括)结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
上面例子中,<bookstore>和<book>都拥有元素内容,因为它们包含了其他元素。<author>只包含文本。
在上例中,只有<book>元素拥有属性(catagory="CHILDREN"......)
XML属性
属性提供有关元素的额外信息,通畅提供不属于数据组成部分的信息。在下面的例子中,文件类型与数据五官,但是对需要处理这个元素的软件来说很重要。
<file type="gif">computer.gif</file>
XML元素vs属性
请看这两个例子:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
效果是一样的。尽量避免使用属性。如果信息感觉起来像数据,可以用子元素。
<note>
<date>
<day>08</day>
<month>08</month>
<year>2008</year>
</date>
<to>George</to>
<from>John</from>
</note>
针对元数据的XML属性
有时候会向元素分配ID引用。这些ID索引可用于标识XML元素,它起作用的方式与HTML中的ID是一致的,下面的例子演示了这种情况:
<messages>
<note id = "501">
......
</note>
<note id = "502">
......
</note>
</messages>
上面的ID仅仅是一个标识符,用于标识不同的便签。它并不是便签书库的组成部分。
元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
注意:
1. 所有的XML元素都必须有关闭标签(打开标签和关闭标签通常被称为开始标签和结束标签)。
2. XML标签对大小写敏感。
3. XML必须正确地嵌套
<b><i>This text is bold and italic</i></b> // 正确
<b><i>This text is bold and italic</b></i> // 错误
4. XML文档必须有根元素
5. XML的属性值须加引号
如果属性值本身包含双引号,那么有必要使用单引号包围它,就像这个例子:
<gangster name='George "Shotgun" Ziegler'>
在XML中,XML的属性值须加引号。下面两个文档,第一个是错误的,第二个是正确的。
<note date=08/08/2008>
<to>George</to>
<from>John</from>
</note>
<note date="08/08/2008">
<to>George</to>
<from>John</from>
</note>
在第一个文档中的错误是,note元素中的date属性没有加双引号。
实体引用
在xml中,一些字符拥有特殊的意义。
如果把字符“<”放在XML元素中,会发生错误,这是因为解析器会把它当做新元素的开始。
这样会产生XML错误:
<message>if salary < 1000 then</message>
为了避免这个错误,请用实体引用来代替"<"字符:
<message>if salary < 1000 then</message>
在XML中,有5个预定义的实体引用:
< < 小于 > > 大于 & & 和号 ' ' 单引号 " " 引号
XML中的注释
<!-- This is a comment -->
在XML中,空格会被保留
XML已LF存储换行