- <?xml version="1.0" encoding="ISO-8859-1"?>
- 第一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码 (ISO-8859-1 = Latin-1/西欧字符集)。
XML 文档形成一种树结构
XML 文档必须包含根元素。该元素是所有其他元素的父元素。
XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
所有元素均可拥有子元素:
- <root>
- <child>
- <subchild>.....</subchild>
- </child>
- </root>
父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹)。
在 XML 中,省略关闭标签是非法的。所有元素都必须有关闭标签:
- <p>This is a paragraph</p>
- <p>This is another paragraph</p>
XML 标签对大小写敏感
XML 元素使用 XML 标签进行定义。
XML 文档必须有根元素
XML 文档必须有一个元素是所有其他元素的父元素。该元素称为根元素。
XML 的属性值须加引号
<note > <to>George</to> <from>John</from> </note>实体引用
在 XML 中,一些字符拥有特殊的意义。
如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。
这样会产生 XML 错误:
<message>if salary < 1000 then</message>为了避免这个错误,请用实体引用来代替 "<" 字符:
<message>if salary 1000 then</message>在 XML 中,有 5 个预定义的实体引用:
&'"
<
<
小于
>
>
大于
&
和号
'
单引号
"
引号
注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
XML 以 LF 存储换行
在 Windows 应用程序中,换行通常以一对字符来存储:回车符 (CR) 和换行符 (LF)。这对字符与打字机设置新行的动作有相似之处。在 Unix 应用程序中,新行以 LF 字符存储。而 Macintosh 应用程序使用 CR 来存储新行。
什么是 XML 元素?
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
<bookstore>
<book category="CHILDREN">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
在上例中,只有 <book> 元素拥有属性(category="CHILDREN")。
XML 命名规则
XML 元素必须遵循以下命名规则:
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字符 “xml”(或者 XML、Xml)开始
- 名称不能包含空格
可使用任何名称,没有保留的字词。
属性 (Attribute) 提供关于元素的额外(附加)信息。
XML 属性必须加引号
在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧 元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。拥有正确语法的 XML 被称为“形式良好”的 XML。
通过 DTD 验证的 XML 是“合法”的 XML。
形式良好的 XML 文档
“形式良好”或“结构良好”的 XML 文档拥有正确的语法。
“形式良好”(Well Formed)的 XML 文档会遵守前几章介绍过的 XML 语法规则:
- XML 文档必须有根元素
- XML 标签对大小写敏感
- XML 元素必须被正确的嵌套
- XML 属性必须加引号
XML DTD
DTD 的作用是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:
XML Schema
W3C 支持一种基于 XML 的 DTD 代替者,它名为 XML Schema:
几乎所有的主流浏览器均支持 XML 和 XSLT。所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器。
解析器把 XML 转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象。
XML DOM
XML DOM (XML Document Object Model) 定义了访问和操作 XML 文档的标准方法。
在下面的例子中,我们使用 DOM 引用从 <to> 元素中获取文本:
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue
- xmlDoc-由解析器创建的 XML 文档
- getElementsByTagName("to")[0]- 第一个 <to> 元素
- childNodes[0]- <to> 元素的第一个子元素(文本节点)
- nodeValue- 节点的值(文本本身)
XML 命名空间提供避免元素命名冲突的方法。使用前缀来避免命名冲突
所有 XML 文档中的文本均会被解析器解析。
只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。
PCDATA
PCDATA 指的是被解析的字符数据(Parsed Character Data)。
XML 解析器通常会解析 XML 文档中所有的文本。
当某个 XML 元素被解析时,其标签之间的文本也会被解析:
CDATA
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
在 XML 元素中,"<" 和 "&" 是非法的。
"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。
"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>
在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。
XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。创建元素
createElement() 方法创建新的元素节点。
createTextNode() 方法创建新的文本节点。
如需创建带有文本内容的新元素,需要同时创建元素节点和文本节点。
newel=xmlDoc.createElement("edition");
newtext=xmlDoc.createTextNode("First");
newel.appendChild(newtext);
x=xmlDoc.getElementsByTagName("book");
x[0].appendChild(newel);
例子解释:
- 创建 <edition> 元素
- 创建值为 "First" 的文本节点
- 把这个文本节点追加到 <edition> 元素
- 把 <edition> 元素追加到第一个 <book> 元素
XML 是基于文本的XML 是基于文本的标记语言。
关于 XML 的一件很重要的事情是,XML 可被类似记事本这样的简单的文本编辑器来创建和编辑。
不过,在您开始使用 XML 进行工作时,您很快会发现,使用一款专业的 XML 编辑器来编辑 XML 文档会更好。
- date="08/08/2008"<