XML基础与应用全解析
立即解锁
发布时间: 2025-08-17 01:32:34 阅读量: 1 订阅数: 5 

### XML基础与应用全解析
#### 1. XML的基本性质
XML文档的最简形式由元素(elements)和属性(attributes)这两个基本单元构成。元素可看作是标签及其包含的内容。以下是一个简单的XML片段示例:
```xml
<trial attempt="1">
<date>12/31/2001 3:15:00pm</date>
<stimulus>Request</stimulus>
<duration>5 minutes</duration>
<response>none</response>
</trial>
```
在这个例子中,存在五个元素:`trial`、`date`、`stimulus`、`duration`和`response`。它们由开始标签、结束标签以及中间的内容来表示。其中,`date`、`stimulus`、`duration`和`response`这四个元素为简单元素,仅包含文本内容;而`trial`元素包含了其他元素,因此`trial`是其他四个元素的父元素,其他四个元素则是它的子元素。这种父子结构是XML层次结构的关键。
属性是名值对,例如上述示例中的`attempt="1"`,它出现在元素的开始标签内,用于提供关于该元素的信息。一个元素可以携带任意数量的属性,有些应用甚至仅使用属性来传达信息,HTML的`img`标签就是一个典型例子:
```html
<img src="images/logo.gif" height="30" width="75">
```
在HTML中,图像标签没有结束标签是正常的,但在XML中,必须要有结束标签。不过,为了避免书写`</img>`这样的形式,XML规定了一种缩写形式:
```xml
<img src="images/logo.gif" height="30" width="75" />
```
当在开始标签内添加斜杠时,该元素就成为了空元素,无需结束标签。需要注意的是,虽然XML不要求在空元素的结束斜杠前加空格,但许多浏览器在缺少空格时可能无法正常显示。
#### 2. XML的一些应用示例
XML具有很强的灵活性,可应用于多种环境,包括浏览器、服务器以及不同操作系统、不同语言、运行不同应用程序的机器之间的通信。以下是XML在不同场景下的应用:
##### 2.1 浏览器中的XML
- **XHTML**:对于大多数人来说,最熟悉的XML应用可能就是XHTML了。XHTML是使用XML新规则重新定义的HTML,例如元素名称区分大小写(在标签中),并且属性值必须用引号括起来。一个XHTML文档与编写良好的HTML文档几乎没有区别。只需在文件顶部添加XML声明,就可以将普通的HTML文档转换为XHTML文档,示例如下:
```xml
<?xml version="1.0"?>
<html>
<head><title>Preliminary Results</title></head>
<body>
<h1>Preliminary Results</h1>
<p>Upon initial investigation, it seems that the subject could,
under proper stimuli, be induced to emit sounds similar to those of the
<i>canis familiaris</i>. Results to follow.</p>
</body>
</html>
```
- **使用CSS样式化XML**:一些浏览器允许直接在浏览器中使用XML,并通过级联样式表(CSS)来设置其样式。CSS最初是为HTML开发的,它能让开发者控制内容的呈现方式。例如,通过向原始XML消息添加CSS信息,可以获得与上述XHTML示例几乎相同的效果。以下是一个XML文件及其对应的CSS文件示例:
```xml
<!-- message.xml -->
<?xml version="1.0"?>
<?xml-stylesheet href="messages.css" type="text/css"?>
<message>
<heading>Preliminary Results</heading>
<paragraph>
Upon initial investigation, it seems that the subject could,
under proper stimuli, be induced to emit sounds similar to those
of the <species>canis familiaris</species>. Results to follow.
</paragraph>
</message>
```
```css
/* messages.css */
heading { display: block;
font-weight: bold;
font-size: 24pt;
padding-bottom: 19px }
paragraph { display: block;}
species { font-style: italic }
```
- **XSLT转换**:在某些情况下,浏览器可能无法处理某些XML信息,此时就需要使用可扩展样式表语言转换(XSLT)。XSLT可以对XML文档进行数据的删除、重新排列和修改,然后再呈现给客户端。例如,对于只能显示文本的浏览器(如手机浏览器),可以使用XSLT将XML消息进行转换。以下是一个XSL样式表示例:
```xml
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<head>
<title>
<xsl:value-of select="message/heading"/>
</title>
</head>
<body>
<xsl:value-of select="message/paragraph"/>
</body>
</html>
</xsl:template></xsl:stylesheet>
```
##### 2.2 服务器中的XML
- **应用配置文件**:XML常用于应用程序的配置文件,这些文件易于操作且具有良好的可读性。由于它们可以包含特定的、便于人类理解的元素名称,因此比普通的文本文件更易于处理。以下是一个ASP.NET配置文件的片段示例:
```xml
<configuration>
<configSections>
<sectionGroup name="system.web">
<section name="trace"
type="System.Web.Configuration.TraceConfigHandler">
</sectionGroup>
</configSections>
<system.web>
<trace enabled="true" requestLimit="20" pageOutput="true"
traceMode="SortByTime" localOnly="true" />
</system.web>
</configuration>
```
- **直接处理XML**:除了用于配置文件,应用程序还可以直接处理XML,进行只读分析或操作。这可能涉及到基于Web的应用程序(如Servlet或Java Server Pages)的分析,或者像关系数据库和XML数据库这样的基本操作。
- **数据绑定**:XML还适用于数据绑定,通过将数据绑定到对象(如Java对象),非XML程序员可以执行业务逻辑,而无需担心数据的底层结构。以下是一个Java代码片段示例:
```java
...
Car birthdayPresent = new Car();
float theirPrice = birthdayPresent.getPrice();
birthdayPresent.setOffer(new java.math.BigDecimal(theirPrice/2));
...
```
- **数据交换**:XML的一个重要应用是简化不同平台上应用程序之间的数据交换。由于XML是文本格式,具有良好的可移植性,因此是在应用程序之间传输数据的理想选择。像简单对象访问协议(SOAP)和.NET等技术都使用XML来实现数据的传输。
#### 3. XML相关技术的整体架构
编程使用XML涉及多种相关技术和标准,以下是对这些技术的简要介绍:
##### 3.1 XML基础部分
- **基本XML文档结构**:解释XML作为数据结构的基本概念,包括元素、属性、格式正确性、验证和命名空间等。
- **设计XML文档和应用程序**:在构建应用程序之前,讨论如何确定要构建的内容以及如何进行结构设计。
- **文档对象模型(DOM)**:通过Java、VB、C++、PHP和Perl等语言的示例,介绍如何使用DOM来操作XML文档。
- **高级DOM技术**:探讨DOM的新发展方向,如使用TreeWalkers、NodeIterators和NodeFilters等编程技术,以及DOM事件和DOM Level 3。
- **XML流:简单API for XML(SAX)**:介绍SAX的使用,它是一种按顺序分析XML数据的方法,速度快且资源占用少,但为只读模式。
- **验证**:讨论数据完整性的重要性以及确保数据完整性的技术。
- **文档类型定义(DTDs)**:介绍创建和读取DTD的基本方法,DTD用于指定XML文档的结构要求。
- **XML模式**:比DTD更高级,介绍W3C XML模式的功能、高级特性以及其他XML模式提案。
- **可扩展样式表语言转换(XSLT)**:介绍如何构建XSL样式表,对XML数据进行转换。
- **转换和应用**:展示如何在应用程序中使用XSLT进行数据转换。
- **选择数据:XML路径语言(XPath)**:介绍XPath的使用,它允许程序员在文档中选择特定的数据。
##### 3.2 XML的应用部分
- **基于浏览器的XML:级联样式表(CSS)**:展示如何使用CSS直接在浏览器中操作XML内容,实现内容与呈现的分离。
- **基于浏览器的XML:XHTML**:讨论XML在浏览器中的应用,包括XHTML和客户端脚本(如JavaScript)的使用。
- **XML链接语言(XLink)**:介绍XLink的功能,它提供了比当前网页更强大的信息链接方式。
- **XForms**:介绍XForms的使用,它是现有Web技术的扩展,可大大提高数据收集的能力和灵活性。
- **XML与出版:使用XSL格式化对象**:介绍如何使用XSL格式化对象创建复杂的文档,并将其转换为PDF文档。
- **XML与Web服务**:展示如何使用Web服务实现不同地理位置和操作系统的机器之间的通信。
- **XML数据绑定**:讨论数据绑定的概念,如数据的编组和解组以及对结果对象的操作。
- **XML与数据库:关系数据库**:介绍现有关系数据库的XML功能。
- **XML与数据库:原生XML数据库**:描述不同类型的XML数据库及其使用方法。
#### 4. 学习XML的前提条件
要使用XML进行编程,需要熟悉至少一种编程语言,因为XML本身不是编程语言,而是一种用于存储信息的结构,可通过应用程序轻松操作。在开始的几章中,会提供Java、C++、VB、PHP、Perl等多种语言的示例,后续会重点使用一两种语言展示新示例,读者可以将这些概念应用到自己的应用程序中。同时,即使没有XML或HTML的使用经验也可以学习,但有相关经验会使学习过程更加轻松。
在学习过程中,书中提供的示例代码仅用于演示不同环境下各种概念的工作原理,实际构建应用程序时可能会遇到网络设置、安全设置等问题,需要读者自行解决。
以下是一个简单的mermaid流程图,展示XML在浏览器和服务器中的应用流程:
```mermaid
graph LR
A[XML文档] --> B{应用场景}
B --> C[浏览器]
B --> D[服务器]
C --> E[XHTML]
C --> F[CSS样式化]
C --> G[XSLT转换]
D --> H[应用配置文件]
D --> I[直接处理XML]
D --> J[数据绑定]
D --> K[数据交换]
```
通过以上内容,我们对XML的基本性质、应用场景以及相关技术有了全面的了解。在实际应用中,可以根据具体需求选择合适的技术来处理XML数据。
#### 5. XML应用操作步骤详解
##### 5.1 浏览器中XML应用操作步骤
- **将HTML转换为XHTML**
1. 打开需要转换的HTML文件。
2. 在文件的顶部添加XML声明:`<?xml version="1.0"?>`。
3. 检查元素名称的大小写,确保遵循XML的大小写敏感规则。
4. 确保所有属性值都用引号括起来。
5. 保存文件,此时该文件就成为了XHTML文件。
- **使用CSS样式化XML**
1. 创建一个XML文件,例如`message.xml`,并在文件中添加XML声明和XML内容,示例如下:
```xml
<?xml version="1.0"?>
<?xml-stylesheet href="messages.css" type="text/css"?>
<message>
<heading>Preliminary Results</heading>
<paragraph>
Upon initial investigation, it seems that the subject could,
under proper stimuli, be induced to emit sounds similar to those
of the <species>canis familiaris</species>. Results to follow.
</paragraph>
</message>
```
2. 创建一个CSS文件,例如`messages.css`,并在其中定义样式规则,示例如下:
```css
heading { display: block;
font-weight: bold;
font-size: 24pt;
padding-bottom: 19px }
paragraph { display: block;}
species { font-style: italic }
```
3. 将CSS文件与XML文件放在同一目录下,或者根据实际情况调整`<?xml-stylesheet href="messages.css" type="text/css"?>`中的`href`属性值,确保XML文件能够正确引用CSS文件。
4. 在支持XML和CSS的浏览器中打开XML文件,即可看到应用了CSS样式的XML内容。
- **使用XSLT转换XML**
1. 创建一个XML文件,作为待转换的源文件。
2. 创建一个XSL样式表文件,例如`messages.xsl`,示例如下:
```xml
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<head>
<title>
<xsl:value-of select="message/heading"/>
</title>
</head>
<body>
<xsl:value-of select="message/paragraph"/>
</body>
</html>
</xsl:template></xsl:stylesheet>
```
3. 使用支持XSLT的工具或编程语言(如Java、Python等),将XML文件和XSL样式表文件进行关联和转换。例如,在Java中可以使用`javax.xml.transform`包中的类来实现转换。
4. 将转换后的结果输出到目标文件或显示在浏览器中。
##### 5.2 服务器中XML应用操作步骤
- **使用XML作为应用配置文件**
1. 确定应用程序需要配置的参数和信息。
2. 创建一个XML文件,例如`Web.config`,并根据应用程序的需求定义元素和属性,示例如下:
```xml
<configuration>
<configSections>
<sectionGroup name="system.web">
<section name="trace"
type="System.Web.Configuration.TraceConfigHandler">
</sectionGroup>
</configSections>
<system.web>
<trace enabled="true" requestLimit="20" pageOutput="true"
traceMode="SortByTime" localOnly="true" />
</system.web>
</configuration>
```
3. 在应用程序中读取和解析该XML配置文件,获取所需的配置信息。不同的编程语言有不同的XML解析库,例如Java可以使用`DOM`、`SAX`或`JAXB`等,Python可以使用`xml.etree.ElementTree`或`lxml`等。
4. 根据读取到的配置信息,对应用程序进行相应的配置和初始化。
- **直接处理XML数据**
1. 确定需要处理的XML数据来源,可以是文件、网络请求或数据库等。
2. 选择合适的XML解析方法,如`DOM`或`SAX`。如果XML数据较小且需要频繁访问和修改数据,可以选择`DOM`;如果XML数据较大且只需要按顺序读取数据,可以选择`SAX`。
3. 使用相应的编程语言和XML解析库,对XML数据进行解析和处理。例如,在Java中使用`DOM`解析XML的示例代码如下:
```java
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.io.File;
public class XMLParser {
public static void main(String[] args) {
try {
File xmlFile = new File("example.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("elementName");
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
// 处理元素的内容和属性
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
4. 根据处理结果,进行相应的业务逻辑操作,如数据存储、数据分析等。
- **实现XML数据绑定**
1. 定义与XML结构对应的Java类,例如:
```java
public class Car {
private float price;
private java.math.BigDecimal offer;
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public java.math.BigDecimal getOffer() {
return offer;
}
public void setOffer(java.math.BigDecimal offer) {
this.offer = offer;
}
}
```
2. 使用数据绑定框架(如JAXB)将XML数据与Java对象进行绑定。示例代码如下:
```java
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.File;
public class DataBindingExample {
public static void main(String[] args) {
try {
// 创建JAXB上下文
JAXBContext jaxbContext = JAXBContext.newInstance(Car.class);
// 从XML文件中读取数据并转换为Java对象
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
File xmlFile = new File("car.xml");
Car car = (Car) unmarshaller.unmarshal(xmlFile);
// 对Java对象进行操作
float theirPrice = car.getPrice();
car.setOffer(new java.math.BigDecimal(theirPrice / 2));
// 将Java对象转换为XML数据并保存到文件
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(car, new File("newCar.xml"));
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
```
#### 6. XML相关技术对比
| 技术名称 | 特点 | 适用场景 |
| ---- | ---- | ---- |
| DOM | 以树形结构表示XML文档,可随机访问和修改节点,占用内存较大 | XML数据较小,需要频繁访问和修改数据的场景 |
| SAX | 按顺序解析XML数据,速度快,资源占用少,只读模式 | XML数据较大,只需要按顺序读取数据的场景 |
| DTD | 简单易用,历史悠久,但功能有限,缺乏数据类型支持 | 对数据类型要求不高,需要快速定义XML结构的场景 |
| XML Schema | 功能强大,支持数据类型定义和约束,可扩展性好 | 对数据类型和约束要求较高,需要更严格的XML结构定义的场景 |
| XSLT | 可对XML数据进行转换和处理,生成不同格式的输出 | 需要对XML数据进行转换和呈现的场景 |
| CSS | 用于控制XML内容的呈现样式,简单直观 | 只需要对XML内容进行样式设置的场景 |
#### 7. 总结
通过对XML的学习,我们了解到它具有灵活的结构和广泛的应用场景。从基本的元素和属性构成,到在浏览器和服务器中的各种应用,XML都展现出了强大的功能。在实际应用中,我们可以根据具体需求选择合适的XML相关技术,如使用DOM或SAX进行XML解析,使用DTD或XML Schema进行结构定义,使用XSLT进行数据转换等。同时,掌握XML数据绑定和数据交换等技术,可以更好地实现不同系统之间的数据交互和共享。
以下是一个mermaid流程图,展示XML处理的整体流程:
```mermaid
graph LR
A[XML数据] --> B{选择解析方法}
B --> C[DOM解析]
B --> D[SAX解析]
C --> E[随机访问和修改数据]
D --> F[按顺序读取数据]
E --> G[数据处理和业务逻辑]
F --> G
G --> H{输出结果}
H --> I[XML文件]
H --> J[其他格式文件]
H --> K[显示在界面]
```
希望通过本文的介绍,能够帮助读者更好地理解和应用XML技术,在实际开发中发挥XML的优势。
0
0
复制全文
相关推荐









