“核心技术Ⅱ:XML”的版本间差异

来自Wikioe
跳到导航 跳到搜索
无编辑摘要
第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">
下面这些实体引用:
  &lt; &gt; &amp; &quot; &apos;
都有预定义的含义:
  小于、大于、&、引号、省略号等字符。
</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):

  1. 属性文件:用于描述程序配置;包含了一组“名/值”对:
    fontname=Times Roman
    fontsize=l2
    windowsize=400 200
    co1or=O 5O 100
    

但是:

  1. 属性文件采用的是一种单一的平面层次结构;所以常常会出现这种情况:
    title.fontname=Helvetica
    title.fontsize=36
    body.fontname=Times Roman
    body.fontsize=12
    
  2. 属性文件要求键是唯一的;所以保存序列值需要:
    menu.item.l=Times Roman
    menu.item.2=Helvetica
    menu.item.3=Goudy Old Style
    


XMLHTML 格式是古老的标准通用标记语言(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>

XMLHTML的区别:

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 文档的结构

  1. XML 文档应当以一个文档头开始:
    <?xml version="l.O"?><?xml version="l.O" encoding="UTF-8"?>
    
  2. 文档头之后通常是文档类型定义(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">
    
  3. XML 文档的正文包含根元素,根元素包含其他元素
    <?xml version="l.O"?>
    <!DOCTYPE configuration ... >
    <configuration>
       <title>
          <font>
             <name>Helvetica</name>
             <Size>36</size>
          </font>
       </title>
       ...
    </configuration>
    
    1. 元素可以有子元素(child element )、文本或两者皆有;
    2. 在设计XML 文档结构时,应避免混合式内容(mixed content),以简化解析过程:
      <font>
         Helvetica
         <Size>36</size>
      </font>
      
    3. XML元素可以包含属性,但属性的灵活性要差很多;
      • “属性只应该用来修改值的解释,而不是用来指定值。”
      • “HTML 中,凡是不显示在网页上的都是属性。”
    <font name="Helvetica" size="36 pt"/>
    
    <font>
       <name>Helvetica</name>
       <Size unit="pt">36</size>
    </font>
    


XML中的其他一些标记:

  1. 字符引用(character reference):形式是“&#”十进制值;或“&#x”十六进制值;
  2. 实体引用(entity reference):形式是“&name”;
    下面这些实体引用:
       &lt; &gt; &amp; &quot; &apos;
    都有预定义的含义:
       小于、大于、&、引号、省略号等字符。
    
  3. CDATA部分(CDATA Section):用“<![CDATA[”和“]]>”来限定其界限;
    • 它们是字符数据的一种特殊形式。可以使用它们来襄括那些含有“<”、“>”、“&”之类字符的字符串,而不必将它们解释为标记;
    • CDATA 部分不能包含字符串“]]>”;
    <![CDATA[< & > are my favorite delimiters]]>
    
  4. 处理指令(processing instruction):是那些专门在处理XML 文档的应用程序中使用的指令,它们由“<?”和“?>”来限定其界限:
    <?xml-stylesheet href="mystyle.css" type="text/css"?>
    
    每个XML 都以一个处理指令开头:
    <?xml version="l.O"?>
    
  5. 注释(comment):用“<!-”和“-->”限定其界限:
    • 注释不应该含有字符串“--”;
    <!-- This is a comment. -->
    

解析XML文档

验证XML文档

文档类型定义

XML Schema

实用示例

使用“XPath”来定位信息

使用命名空间

流机制解析器

使用“SAX”解析器

使用“StAX”解析器

生成XML文档

不带命名空间的文档

带命名空间的文档

写出文档

示例:生成SVG 文件

使用StAX 写出XML文档

XSL 转换