HTML与XML的区别
- HTML对大小写不敏感,XML大小写敏感
- HTML结束标签可以省略,如
</p>
,XML不能 - XML只有单个标签而没有结束标签的元素必须以
/
结束 - XML属性值必须用引号括起来
- HTML属性可以没有值,XML所有属性必须有值
验证XML文档
需要指定文档结构时,可以提供一个文档类型定义(DTD)或XML Schema
文档类型定义
- 将这些规则纳入XML文档
1 | <?xml version="1.0"?> |
这些规则被纳入到DOCTYPE声明中,代码块[…]用来限定其界限,比如configuration
- SYSTEM声明,将DTD存储在外面
1 |
- 标记PUBLIC标识符
1 | class MyEntityResolver implements EntityResolver{ |
PS:具体的类型规则看文档,注意在设计DTD时应该要么只包含文本,要么包含其他元素,避免解析混合式(标签和文本的混合)内容时空
XML Schema
声明Schema文件
1
2
3<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</project>使用xsd:表示XSL Schema定义的命名空间
1
2
3
4
5
6
7
8<xsd:element name="name" type="xsd:string"/>
- ref属性引用Schema中位于别处的定义
<xsd:element ref="name"/>
<xsd:element name="style" type=StyleType"/>
<xsd:restriction base="xsd:string"/>
<xsd:enumeration value="PLAIN"/>
</xsd:restriction>
</xsd:element>
使用XPath定位信息
查找下列的username的值,,通过XPath表达式/configuration/database/username
1
2
3
4
5
6<configfuration>
<database>
<username id="test">pinnuli</username>
<password>123456</password>
</database>
</configfuration>用XPathFactory创建一个XPath对象,调用evaluate方法计算XPath表达式
1
2
3XPathFactory xpFactory = XPathFactory.newInstance();
path = xpfactory.newXPath();
String username = path.evaluate(/configuration/database/username",doc);
具体的语法看文档
XML的命名空间
使用xmlns给定命名空间
1
2
3
4
5<element xmlns="namespaceURI1">
<child xmlns="namespaceURI2">
grandchildren
</child>
</element>这里第一个子元素和孙元素都是第二个命名空间的一部分
使用xmlns:prefix=”namespaceURI”定义命名空间和前缀
1
2
3
4<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="pinnuli" type="haha"/>
...
</xsd:schema>在这里xsd:schema实际上指的是命名空间
http://www.w3.org/2001/XMLSchema
中的schema
- 可以控制解析器对命名空间的处理,默认情况下DOM解析器并非“命名空间感知的”,可以调用DocumentBuilderFactory类的setNamespaceAware()打开命名空间处理特性
1
factory.serNamespaceAware(true);