DocumentBuilder中的setNamespaceAware的目的是什么?

时间:2018-11-19 22:37:02

标签: java xml-parsing

请允许我在哪种情况下将setNamespaceAware设置为truefalse

根据文档Specifies that the parser produced by this code will provide support for XML namespaces.

但是,如果我将其设置为true,则对于具有命名空间的XML标签,它会产生错误。

DocumentBuilderFactory document_builder_factory = null;
DocumentBuilder builder = null;
document_builder_factory = DocumentBuilderFactory.newInstance();
document_builder_factory.setNamespaceAware(true);

try{
    Text text = new Text();

    text.set("<h:test>10</h:test>");
    builder = document_builder_factory.newDocumentBuilder();

    Document doc = builder.parse(new InputSource(new StringReader(text.toString())));;
    System.out.println(doc.getElementsByTagName("h:test").item(0).getChildNodes().item(0).getNodeValue());

}catch (Exception e){

}

如果将setNamespaceAware设置为true,则会出现以下错误。

  

[致命错误]:1:9:元素“ h:test”的前缀“ h”未绑定。

如果我没有设置它,那么我会得到正确的值。

1 个答案:

答案 0 :(得分:2)

在非命名空间感知的文档中,冒号是节点名称的有效字符,例如,您可以有一个元素

在引入 XML 命名空间之前的这些元素可以正常工作。因此,为了向后兼容,当引入对命名空间的支持时,保持代码正常工作的唯一方法是默认情况下将命名空间感知设为 false,因为 在命名空间感知文档中是不合法的。