XML 进阶学习笔记

一、命名空间

命名空间是用于区分相同名称但属于不同集合的元素和属性的方法。在XML中,命名空间使用统一资源标识符(URI)表示。

1.1 命名空间的声明

命名空间的声明可以在XML文档头部或元素内进行声明。在文档头部声明需要使用xmlns属性,如下所示:

xmlCopy Code
<?xml version="1.0" encoding="UTF-8"?> <rootElement xmlns:ns="http://www.example.com"> <ns:childElement>Example</ns:childElement> </rootElement>

在元素内声明需要使用xmlns前缀,如下所示:

xmlCopy Code
<?xml version="1.0" encoding="UTF-8"?> <rootElement> <ns:childElement xmlns:ns="http://www.example.com">Example</ns:childElement> </rootElement>

1.2 命名空间的引用

在XML中,可以使用前缀来引用命名空间,如下所示:

xmlCopy Code
<?xml version="1.0" encoding="UTF-8"?> <ns:rootElement xmlns:ns="http://www.example.com"> <ns:childElement>Example</ns:childElement> </ns:rootElement>

也可以使用默认命名空间,如下所示:

xmlCopy Code
<?xml version="1.0" encoding="UTF-8"?> <rootElement xmlns="http://www.example.com"> <childElement>Example</childElement> </rootElement>

二、DTD

文档类型定义(DTD)是一种规范,用于定义XML文档中允许出现的元素和属性。DTD可以在XML文档的头部进行声明,如下所示:

xmlCopy Code
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE rootElement SYSTEM "example.dtd"> <rootElement> <childElement>Example</childElement> </rootElement>

三、XSD

XML模式描述语言(XSD)是一种用于定义XML文档结构的语言。XSD具有比DTD更强的类型和约束支持,也可以通过命名空间进行引用。

以下是一个使用XSD定义的示例XML文档:

xmlCopy Code
<?xml version="1.0" encoding="UTF-8"?> <rootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="example.xsd"> <childElement>Example</childElement> </rootElement>

对应的XSD定义文件如下:

xmlCopy Code
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="rootElement"> <xs:complexType> <xs:sequence> <xs:element name="childElement" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

这里的XSD定义文件定义了一个根元素和一个子元素,并且指定了该子元素的类型为字符串。

四、XPath

XPath是一种用于在XML文档中导航和选择元素的语言。以下是一个XPath示例:

xmlCopy Code
<?xml version="1.0" encoding="UTF-8"?> <rootElement> <childElement>Example</childElement> </rootElement>

我们可以使用以下XPath表达式来选择子元素:

Copy Code
/rootElement/childElement

五、实例

以下是一个使用以上方法进行定义的XML文档示例:

xmlCopy Code
<?xml version="1.0" encoding="UTF-8"?> <ns:students xmlns:ns="http://www.example.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com example.xsd"> <ns:student id="1001"> <ns:name>Jack</ns:name> <ns:age>18</ns:age> </ns:student> <ns:student id="1002"> <ns:name>Kate</ns:name> <ns:age>19</ns:age> </ns:student> </ns:students>

对应的XSD定义文件如下:

xmlCopy Code
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="students"> <xs:complexType> <xs:sequence> <xs:element name="student" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="age" type="xs:integer"/> </xs:sequence> <xs:attribute name="id" type="xs:integer"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

这里的XML文档用于表示学生信息,每个学生有一个唯一的ID、名字和年龄。XSD定义文件指定了该文档必须具有一个students元素和任意数量的student元素,并且每个student元素必须包含一个name和age子元素,以及一个id属性。