summaryrefslogtreecommitdiffhomepage
path: root/zh-cn/xml-cn.html.markdown
blob: 0476a0a8faa9d3b7f8c21522a4965ee1393d9e63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
---
language: xml
contributors:
  - ["João Farias", "https://github.com/JoaoGFarias"]
translators:
  - ["Zach Zhang", "https://github.com/checkcheckzz"]
filename: learnxml-cn.xml
lang: zh-cn
---

XML是一种标记语言,被设计用来存储数据和传输数据。

不像HTML, XML不指定怎样显示或格式化数据,只是携带它。


* XML 语法

```xml
<!-- XML中的注解像这样 -->

<?xml version="1.0" encoding="UTF-8"?>
<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">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="WEB">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>

<!-- 上面是一个典型的XML文件。
  它以一个声明开始,通知一些元数据(自选的)
  
  XML使用一个树的结构。上面的文件中,根节点是'bookstore',它有三个孩子节点,
  所有的'books'。那些节点有更多的孩子节点,等等。。。
  
  节点用开放/关闭标签创建, 并且孩子就是在开发和关闭标签之间的节点。-->



<!-- XML 携带两类信息:
  1 - 属性 -> 那是关于一个元素的元数据。
      通常,XML解析器使用这些信息去正确地存储数据。
	  它通过在开放标签里出现在插入语中来表示。
  2 - 元素 -> 那是纯数据。
      那就是解析器将从XML文件提取的东西。
	  元素出现在开放和关闭标签之间,没插入语。-->
      
  
<!-- 下面, 一个有两个属性的元素-->
<file type="gif" id="4293">computer.gif</file>


```

* 良好格式的文件 x 验证

一个XML文件是良好格式的如果它是语法正确的。
但是, 使用文件定义,比如DTD和XML概要,在文件中插入更多的限制是可能的。

一个遵守一个文件定义的XML文件被叫做有效的,对于那个文件来说。

有了这个工具,你能够在应用逻辑之外检查XML数据。

```xml

<!-- 下面, 你能够看到一个简化版本的增加了DTD定义的bookstore文件。-->

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "Bookstore.dtd">
<bookstore>
  <book category="COOKING">
    <title >Everyday Italian</title>
    <price>30.00</price>
  </book>
</bookstore>

<!-- 这个DTD可能是像这样的:-->

<!DOCTYPE note
[
<!ELEMENT bookstore (book+)>
<!ELEMENT book (title,price)>
<!ATTLIST book category CDATA "Literature">
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>


<!-- 这个DTD以一个声明开始。
  接下来, 根节点被声明, 它需要一个或多个孩子节点'book'。 
  每个 'book' 应该准确包含一个 'title' 和 'price' 和
  一个被叫做'category'的缺省值为"Literature"的属性。
  这个'title' 和 'price'节点包含一个解析过的字符数据。-->

<!-- 这个DTD可以在XML文件中本身被声明。-->

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE note
[
<!ELEMENT bookstore (book+)>
<!ELEMENT book (title,price)>
<!ATTLIST book category CDATA "Literature">
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>

<bookstore>
  <book category="COOKING">
    <title >Everyday Italian</title>
    <price>30.00</price>
  </book>
</bookstore>


```