1、 所有元素都要正确被关闭,空元素另外处理
2、 标签之间不得交叉
3、 所有属性都得包上引号
4、 元素,属性名大小写区分
5、 CDATA区
<![CDATA[
所要写的文字
第二行
]]>
解析器设置
使用 DocumentBuilder 创建解析器的优点之一在于能够控制 DocumentBuilderFactory 创建的解析器上的各种设置。例如,可以设置解析器验证文档:
...
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(true);
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(docFile);
} catch (Exception e) {
...
Java 的 DOM Level 2 实现允许通过以下方法控制解析器的参数:
- setCoalescing():决定解析器是否要将 CDATA 节点转换为文本,以及是否要和周围的文本节点合并(如果适用的话)。其默认值为 false。
- setExpandEntityReferences(): 确定是否要展开外部实体引用。如果为 true,外部数据将插入文档。其默认值为 true
- setIgnoringComments():确定是否要忽略文件中的注释。其默认值为 false。
- setIgnoringElementContentWhitespace():确定是否要忽略元素内容中的空白(类似于浏览器对待 HTML 的方式)。其默认值为 false。
- setNamespaceAware():确定解析器是否要注意名称空间信息。其默认值为 false。
- setValidating():默认情况下,解析器不验证文档。将这个参数设置为 true 可打开验证功能。
解析器异常
由于在创建解析器时存在所有这些可能性,其中许多地方都可能会出错。正如这里的例子所表明的,应用程序把所有这些内容转储到一个单一的通用 Exception
中,就调试而言,这样可能不是很有帮助。
为更好地查明问题,您可以捕捉与创建和使用解析器的各方面相关的特定异常:
...
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(docFile);
} catch (javax.xml.parsers.ParserConfigurationException pce) {
System.out.println("The parser was not configured correctly.");
System.exit(1);
} catch (java.io.IOException ie) {
System.out.println("Cannot read input file.");
System.exit(1);
} catch (org.xml.sax.SAXException se) {
System.out.println("Problem parsing the file.");
System.exit(1);
} catch (java.lang.IllegalArgumentException ae) {
System.out.println("Please specify an XML source.");
System.exit(1);
}
...
一旦解析器已创建了一个 Document
,应用程序就能单步调试它以检查数据