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属性。