“核心技术Ⅱ:XML”的版本间差异
跳到导航
跳到搜索
无编辑摘要 |
(→XML概述) |
||
第2行: | 第2行: | ||
== XML概述 == | == XML概述 == | ||
XML 是一种非常有用的描述结构化信息的技术。 | |||
“'''Properties'''”类:在单个方法调用中读入这样的“'''属性文件'''”(property file): | |||
# 属性文件:用于描述程序配置;包含了一组“名/值”对: | |||
#: <syntaxhighlight lang="properties"> | |||
fontname=Times Roman | |||
fontsize=l2 | |||
windowsize=400 200 | |||
co1or=O 5O 100 | |||
</syntaxhighlight> | |||
但是: | |||
# 属性文件采用的是一种单一的平面层次结构;所以常常会出现这种情况: | |||
#: <syntaxhighlight lang="properties"> | |||
title.fontname=Helvetica | |||
title.fontsize=36 | |||
body.fontname=Times Roman | |||
body.fontsize=12 | |||
</syntaxhighlight> | |||
# 属性文件要求键是唯一的;所以保存序列值需要: | |||
#: <syntaxhighlight lang="properties"> | |||
menu.item.l=Times Roman | |||
menu.item.2=Helvetica | |||
menu.item.3=Goudy Old Style | |||
</syntaxhighlight> | |||
'''XML''' 和'''HTML''' 格式是古老的标准通用标记语言(Standard Generalized Markup Language, '''SGML''') 的衍生语言。 | |||
* XML 格式能够表达层次结构,并且重复的元素不会被曲解: | |||
<syntaxhighlight lang="xml"> | |||
<configuration> | |||
<title> | |||
<font> | |||
<name>Helvetica</name> | |||
<Size>36</size> | |||
</font> | |||
</title> | |||
<body> | |||
<font> | |||
<name>Times Roman</name> | |||
<Size>12</size> | |||
</font> | |||
</body> | |||
<window> | |||
<width>400</width> | |||
<height>200</height> | |||
</window> | |||
<color> | |||
<red>O</red> | |||
<green>50</green> | |||
<blue> 100</blue> | |||
</color> | |||
<menu> | |||
<item>Times Roman</item> | |||
<item>Helvetica</item> | |||
<item>Goudy 01d Style</item> | |||
</menu> | |||
</configuration> | |||
</syntaxhighlight> | |||
'''XML''' 和'''HTML'''的区别: | |||
{| class="wikitable" | |||
! XML !! HTML | |||
|- | |||
| 大小写敏感 | |||
如:<nowiki><H1></nowiki> 和<nowiki><hl></nowiki> 是不同的XML 标签 | |||
| 不敏感 | |||
|- | |||
| 结束标签绝对不能省略 | |||
| 如果从上下文中可以分清哪里是段落或列表项的结尾,那么结束标签(如<nowiki></p></nowiki>或<nowiki></li></nowiki>) 就可以省略 | |||
|- | |||
| 只有单个标签而没有相对应的结束标签的元素必须以“/”结尾 | |||
如:<nowiki><img src="coffeecup.png"/ ></nowiki> | |||
| | |||
|- | |||
| 属性值必须用引号括起来 | |||
如:<nowiki><applet code="MyApplet.class" width="300" height="300"></nowiki> | |||
| 引号是可有可无的 | |||
如:<nowiki><applet code="MyApplet.class" width=300 height=300></nowiki> | |||
|- | |||
| 所有属性必须都有属性值 | |||
如:<nowiki><input type="radio" name="1anguage" value="Java" checked="checked"></nowiki> | |||
| 属性名可以没有值 | |||
如:<nowiki><input type="radio" name="1anguage" value="Java" checked></nowiki> | |||
|} | |||
=== XML 文档的结构 === | === XML 文档的结构 === | ||
# XML 文档应当以一个'''文档头'''开始: | |||
#: <syntaxhighlight lang="xml"> | |||
<?xml version="l.O"?> | |||
或 | |||
<?xml version="l.O" encoding="UTF-8"?> | |||
</syntaxhighlight> | |||
# 文档头之后通常是'''文档类型定义'''(Docun1ent Type Definition, DTD): | |||
#: <syntaxhighlight lang="xml"> | |||
<!DOCTYPE web-app PUBLIC | |||
"-//Sun Microsystems, Inc.//OTD Web Application 2.2//EN" | |||
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> | |||
</syntaxhighlight> | |||
# XML 文档的正文包含'''根元素''',根元素包含'''其他元素''': | |||
#: <syntaxhighlight lang="xml"> | |||
<?xml version="l.O"?> | |||
<!DOCTYPE configuration ... > | |||
<configuration> | |||
<title> | |||
<font> | |||
<name>Helvetica</name> | |||
<Size>36</size> | |||
</font> | |||
</title> | |||
... | |||
</configuration> | |||
</syntaxhighlight> | |||
## 元素可以有子元素(child element )、文本或两者皆有; | |||
## 在设计XML 文档结构时,应避免混合式内容(mixed content),以简化解析过程: | |||
##: <syntaxhighlight lang="xml"> | |||
<font> | |||
Helvetica | |||
<Size>36</size> | |||
</font> | |||
</syntaxhighlight> | |||
## XML元素可以包含属性,但属性的灵活性要差很多; | |||
##* “属性只应该用来修改值的解释,而不是用来指定值。” | |||
##* “HTML 中,凡是不显示在网页上的都是属性。” | |||
#: <syntaxhighlight lang="xml"> | |||
<font name="Helvetica" size="36 pt"/> | |||
<font> | |||
<name>Helvetica</name> | |||
<Size unit="pt">36</size> | |||
</font> | |||
</syntaxhighlight> | |||
XML中的其他一些标记: | |||
# '''字符引用'''(character reference):形式是“&#”十进制值;或“&#x”十六进制值; | |||
# '''实体引用'''(entity reference):形式是“&name”; | |||
#: <syntaxhighlight lang="xml"> | |||
下面这些实体引用: | |||
< > & " ' | |||
都有预定义的含义: | |||
小于、大于、&、引号、省略号等字符。 | |||
</syntaxhighlight> | |||
# '''CDATA部分'''(CDATA Section):用“<![CDATA[”和“]]>”来限定其界限; | |||
#* 它们是字符数据的一种特殊形式。可以使用它们来襄括那些含有“<”、“>”、“&”之类字符的字符串,而不必将它们解释为标记; | |||
#* CDATA 部分不能包含字符串“]]>”; | |||
#: <syntaxhighlight lang="xml"> | |||
<![CDATA[< & > are my favorite delimiters]]> | |||
</syntaxhighlight> | |||
# '''处理指令'''(processing instruction):是那些专门在处理XML 文档的应用程序中使用的指令,它们由“<?”和“?>”来限定其界限: | |||
#: <syntaxhighlight lang="xml"> | |||
<?xml-stylesheet href="mystyle.css" type="text/css"?> | |||
每个XML 都以一个处理指令开头: | |||
<?xml version="l.O"?> | |||
</syntaxhighlight> | |||
# '''注释'''(comment):用“<!-”和“-->”限定其界限: | |||
#* 注释不应该含有字符串“--”; | |||
#: <syntaxhighlight lang="xml"> | |||
<!-- This is a comment. --> | |||
</syntaxhighlight> | |||
== 解析XML文档 == | == 解析XML文档 == |
2020年11月24日 (二) 15:22的版本
XML概述
XML 是一种非常有用的描述结构化信息的技术。
“Properties”类:在单个方法调用中读入这样的“属性文件”(property file):
- 属性文件:用于描述程序配置;包含了一组“名/值”对:
fontname=Times Roman fontsize=l2 windowsize=400 200 co1or=O 5O 100
但是:
- 属性文件采用的是一种单一的平面层次结构;所以常常会出现这种情况:
title.fontname=Helvetica title.fontsize=36 body.fontname=Times Roman body.fontsize=12
- 属性文件要求键是唯一的;所以保存序列值需要:
menu.item.l=Times Roman menu.item.2=Helvetica menu.item.3=Goudy Old Style
XML 和HTML 格式是古老的标准通用标记语言(Standard Generalized Markup Language, SGML) 的衍生语言。
- XML 格式能够表达层次结构,并且重复的元素不会被曲解:
<configuration>
<title>
<font>
<name>Helvetica</name>
<Size>36</size>
</font>
</title>
<body>
<font>
<name>Times Roman</name>
<Size>12</size>
</font>
</body>
<window>
<width>400</width>
<height>200</height>
</window>
<color>
<red>O</red>
<green>50</green>
<blue> 100</blue>
</color>
<menu>
<item>Times Roman</item>
<item>Helvetica</item>
<item>Goudy 01d Style</item>
</menu>
</configuration>
XML 和HTML的区别:
XML | HTML |
---|---|
大小写敏感
如:<H1> 和<hl> 是不同的XML 标签 |
不敏感 |
结束标签绝对不能省略 | 如果从上下文中可以分清哪里是段落或列表项的结尾,那么结束标签(如</p>或</li>) 就可以省略 |
只有单个标签而没有相对应的结束标签的元素必须以“/”结尾
如:<img src="coffeecup.png"/ > |
|
属性值必须用引号括起来
如:<applet code="MyApplet.class" width="300" height="300"> |
引号是可有可无的
如:<applet code="MyApplet.class" width=300 height=300> |
所有属性必须都有属性值
如:<input type="radio" name="1anguage" value="Java" checked="checked"> |
属性名可以没有值
如:<input type="radio" name="1anguage" value="Java" checked> |
XML 文档的结构
- XML 文档应当以一个文档头开始:
<?xml version="l.O"?> 或 <?xml version="l.O" encoding="UTF-8"?>
- 文档头之后通常是文档类型定义(Docun1ent Type Definition, DTD):
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//OTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
- XML 文档的正文包含根元素,根元素包含其他元素:
<?xml version="l.O"?> <!DOCTYPE configuration ... > <configuration> <title> <font> <name>Helvetica</name> <Size>36</size> </font> </title> ... </configuration>
- 元素可以有子元素(child element )、文本或两者皆有;
- 在设计XML 文档结构时,应避免混合式内容(mixed content),以简化解析过程:
<font> Helvetica <Size>36</size> </font>
- XML元素可以包含属性,但属性的灵活性要差很多;
- “属性只应该用来修改值的解释,而不是用来指定值。”
- “HTML 中,凡是不显示在网页上的都是属性。”
<font name="Helvetica" size="36 pt"/> <font> <name>Helvetica</name> <Size unit="pt">36</size> </font>
XML中的其他一些标记:
- 字符引用(character reference):形式是“&#”十进制值;或“&#x”十六进制值;
- 实体引用(entity reference):形式是“&name”;
下面这些实体引用: < > & " ' 都有预定义的含义: 小于、大于、&、引号、省略号等字符。
- CDATA部分(CDATA Section):用“<![CDATA[”和“]]>”来限定其界限;
- 它们是字符数据的一种特殊形式。可以使用它们来襄括那些含有“<”、“>”、“&”之类字符的字符串,而不必将它们解释为标记;
- CDATA 部分不能包含字符串“]]>”;
<![CDATA[< & > are my favorite delimiters]]>
- 处理指令(processing instruction):是那些专门在处理XML 文档的应用程序中使用的指令,它们由“<?”和“?>”来限定其界限:
<?xml-stylesheet href="mystyle.css" type="text/css"?> 每个XML 都以一个处理指令开头: <?xml version="l.O"?>
- 注释(comment):用“<!-”和“-->”限定其界限:
- 注释不应该含有字符串“--”;
<!-- This is a comment. -->