- java.lang.Object
-
- javax.xml.parsers.DocumentBuilderFactory
-
public abstract class DocumentBuilderFactory extends Object
定义工厂API,使应用程序能够从XML文档中获取生成DOM对象树的解析器。- 从以下版本开始:
- 1.4
-
-
构造方法摘要
构造方法 变量 构造器 描述 protected
DocumentBuilderFactory()
受保护的构造函数以防止实例化。
-
方法摘要
所有方法 静态方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 abstract Object
getAttribute(String name)
允许用户检索底层实现的特定属性。abstract boolean
getFeature(String name)
获取指定功能的状态。Schema
getSchema()
获取通过setSchema(Schema schema)
方法指定的Schema
对象。boolean
isCoalescing()
指示工厂是否配置为生成将CDATA节点转换为Text节点并将其附加到相邻(如果有)Text节点的解析器。boolean
isExpandEntityReferences()
指示工厂是否配置为生成扩展实体引用节点的解析器。boolean
isIgnoringComments()
指示工厂是否配置为生成忽略注释的解析器。boolean
isIgnoringElementContentWhitespace()
指示工厂是否配置为生成忽略元素内容中可忽略空格的解析器。boolean
isNamespaceAware()
指示工厂是否配置为生成可识别名称空间的解析器。boolean
isValidating()
指示工厂是否配置为生成在解析期间验证XML内容的解析器。boolean
isXIncludeAware()
获取XInclude处理的状态。static DocumentBuilderFactory
newDefaultInstance()
创建DocumentBuilderFactory
内置系统默认实现的新实例。abstract DocumentBuilder
newDocumentBuilder()
使用当前配置的参数创建DocumentBuilder
的新实例。static DocumentBuilderFactory
newInstance()
获取DocumentBuilderFactory
的新实例。static DocumentBuilderFactory
newInstance(String factoryClassName, ClassLoader classLoader)
从类名获取DocumentBuilderFactory
的新实例。abstract void
setAttribute(String name, Object value)
允许用户在底层实现上设置特定属性。void
setCoalescing(boolean coalescing)
指定此代码生成的解析器将CDATA节点转换为Text节点,并将其附加到相邻(如果有)文本节点。void
setExpandEntityReferences(boolean expandEntityRef)
指定此代码生成的解析器将扩展实体引用节点。abstract void
setFeature(String name, boolean value)
设置此工厂创建的DocumentBuilderFactory
和DocumentBuilder
的功能。void
setIgnoringComments(boolean ignoreComments)
指定此代码生成的解析器将忽略注释。void
setIgnoringElementContentWhitespace(boolean whitespace)
指定此工厂创建的解析器在解析XML文档时必须消除元素内容中的空格(有时称为“可忽略的空格”)(参见XML Rec 2.10)。void
setNamespaceAware(boolean awareness)
指定此代码生成的解析器将提供对XML命名空间的支持。void
setSchema(Schema schema)
设置Schema
以供从此工厂创建的解析器使用。void
setValidating(boolean validating)
指定此代码生成的解析器将在解析文档时验证它们。void
setXIncludeAware(boolean state)
设置XInclude处理的状态。
-
-
-
构造方法详细信息
-
DocumentBuilderFactory
protected DocumentBuilderFactory()
受保护的构造函数以防止实例化。 使用newInstance()
。
-
-
方法详细信息
-
newDefaultInstance
public static DocumentBuilderFactory newDefaultInstance()
创建DocumentBuilderFactory
内置系统默认实现的新实例。- 结果
-
DocumentBuilderFactory
内置系统默认实现的新实例。 - 从以下版本开始:
- 9
-
newInstance
public static DocumentBuilderFactory newInstance()
获取DocumentBuilderFactory
的新实例。 此静态方法创建新的工厂实例。 此方法使用以下有序查找过程来确定要加载的DocumentBuilderFactory
实现类:- 使用
javax.xml.parsers.DocumentBuilderFactory
系统属性。 使用配置文件“jaxp.properties”。 该文件采用标准
Properties
格式,通常位于Java安装的conf
目录中。 它包含实现类的完全限定名称,键是上面定义的系统属性。jaxp.properties文件只能由JAXP实现读取一次,然后缓存其值以供将来使用。 如果在第一次尝试从该文件读取时该文件不存在,则不再进行任何检查以检查其是否存在。 在第一次读取之后,无法更改jaxp.properties中任何属性的值。
使用由
ServiceLoader
类定义的服务提供者加载工具尝试使用default loading mechanism查找和加载服务的实现 :服务提供者加载工具将使用current thread's context class loader尝试加载服务。 如果上下文类加载器为null,则将使用system class loader 。否则,返回system-default实现。
一旦应用程序获得对
DocumentBuilderFactory
的引用,它就可以使用工厂来配置和获取解析器实例。故障排除提示
设置
jaxp.debug
系统属性将导致此方法将大量调试消息打印到System.err
了解它正在做什么以及它在哪里查看。如果您在加载
DocumentBuilder
时遇到问题,请尝试:java -Djaxp.debug=1 YourProgram ....
- 结果
-
DocumentBuilderFactory
新实例 - 异常
-
FactoryConfigurationError
- 如果是service configuration error或者实现不可用或无法实例化。
- 使用
-
newInstance
public static DocumentBuilderFactory newInstance(String factoryClassName, ClassLoader classLoader)
从类名获取DocumentBuilderFactory
的新实例。 当类路径中有多个提供程序时,此函数很有用。 它为应用程序提供了更多控制,因为它可以指定应该加载哪个提供程序。一旦应用程序获得对
DocumentBuilderFactory
的引用,它就可以使用工厂来配置和获取解析器实例。故障排除提示
设置
jaxp.debug
系统属性将导致此方法将大量调试消息打印到System.err
了解它正在做什么以及它在哪里查看。如果您有问题,请尝试:
java -Djaxp.debug=1 YourProgram ....
- 参数
-
factoryClassName
- 提供javax.xml.parsers.DocumentBuilderFactory
实现的完全限定工厂类名称。 -
classLoader
-ClassLoader
用于加载工厂类。 如果null
当前Thread
的上下文classLoader用于加载工厂类。 - 结果
-
DocumentBuilderFactory
新实例 - 异常
-
FactoryConfigurationError
- 如果factoryClassName
是null
,或者无法加载工厂类,则实例化。 - 从以下版本开始:
- 1.6
- 另请参见:
-
newInstance()
-
newDocumentBuilder
public abstract DocumentBuilder newDocumentBuilder() throws ParserConfigurationException
使用当前配置的参数创建DocumentBuilder
的新实例。- 结果
- DocumentBuilder的新实例。
- 异常
-
ParserConfigurationException
- 如果无法创建满足请求配置的DocumentBuilder。
-
setNamespaceAware
public void setNamespaceAware(boolean awareness)
指定此代码生成的解析器将提供对XML命名空间的支持。 默认情况下,此值设置为false
- 参数
-
awareness
- 如果生成的解析器将提供对XML命名空间的支持,awareness
true;否则为false。 否则是假的。
-
setValidating
public void setValidating(boolean validating)
指定此代码生成的解析器将在解析文档时验证它们。 默认情况下,此值设置为false
。请注意,“验证”在此处表示XML建议中定义的a validating parser 。 换句话说,它基本上只是控制DTD验证。 (除了JAXP 1.2中定义的遗留两个属性。)
要使用现代模式语言(如W3C XML Schema或RELAX NG而不是DTD),可以通过保留
setValidating(boolean)
方法false
将解析器配置为非验证解析器,然后使用setSchema(Schema)
方法将模式关联到解析器。- 参数
-
validating
- 如果生成的解析器将在解析文档时验证文档,validating
true;否则为false。 否则是假的。
-
setIgnoringElementContentWhitespace
public void setIgnoringElementContentWhitespace(boolean whitespace)
指定此工厂创建的解析器在解析XML文档时必须消除元素内容中的空格(有时称为“可忽略的空格”)(参见XML Rec 2.10)。 请注意,将仅消除直接包含在具有仅元素内容模型的元素内容中的空白(请参阅XML Rec 3.2.1)。 由于依赖于内容模型,此设置要求解析器处于验证模式。 默认情况下,此值设置为false
。- 参数
-
whitespace
- 如果创建的解析器在解析XML文档时必须消除元素内容中的空格,whitespace
true;否则为false。 否则是假的。
-
setExpandEntityReferences
public void setExpandEntityReferences(boolean expandEntityRef)
指定此代码生成的解析器将扩展实体引用节点。 默认情况下,此值设置为true
- 参数
-
expandEntityRef
- 如果生成的解析器将扩展实体引用节点,expandEntityRef
true;否则为false。 否则是假的。
-
setIgnoringComments
public void setIgnoringComments(boolean ignoreComments)
指定此代码生成的解析器将忽略注释。 默认情况下,此值设置为false
。- 参数
-
ignoreComments
-boolean
在处理期间忽略注释的值
-
setCoalescing
public void setCoalescing(boolean coalescing)
指定此代码生成的解析器将CDATA节点转换为Text节点,并将其附加到相邻(如果有)文本节点。 默认情况下,此值设置为false
- 参数
-
coalescing
- 如果生成的解析器将CDATA节点转换为Text节点并将其附加到相邻(如果有)文本节点,coalescing
true;否则为false。 否则是假的。
-
isNamespaceAware
public boolean isNamespaceAware()
指示工厂是否配置为生成可识别名称空间的解析器。- 结果
- 如果工厂配置为生成可识别名称空间的解析器,则为true;否则为false。 否则是假的。
-
isValidating
public boolean isValidating()
指示工厂是否配置为生成在解析期间验证XML内容的解析器。- 结果
- 如果工厂配置为生成在解析期间验证XML内容的解析器,则为true;否则为false。 否则是假的。
-
isIgnoringElementContentWhitespace
public boolean isIgnoringElementContentWhitespace()
指示工厂是否配置为生成忽略元素内容中可忽略空格的解析器。- 结果
- 如果工厂配置为生成忽略元素内容中可忽略空格的解析器,则为true;否则为false。 否则是假的。
-
isExpandEntityReferences
public boolean isExpandEntityReferences()
指示工厂是否配置为生成扩展实体引用节点的解析器。- 结果
- 如果工厂配置为生成扩展实体引用节点的解析器,则为true;否则为false。 否则是假的。
-
isIgnoringComments
public boolean isIgnoringComments()
指示工厂是否配置为生成忽略注释的解析器。- 结果
- 如果工厂配置为生成忽略注释的解析器,则为true;否则为false。 否则是假的。
-
isCoalescing
public boolean isCoalescing()
指示工厂是否配置为生成将CDATA节点转换为Text节点并将其附加到相邻(如果有)Text节点的解析器。- 结果
- 如果工厂配置为生成将CDATA节点转换为Text节点并将其附加到相邻(如果有)Text节点的解析器,则为true;否则为false。 否则是假的。
-
setAttribute
public abstract void setAttribute(String name, Object value) throws IllegalArgumentException
允许用户在底层实现上设置特定属性。实现JAXP 1.5或更高版本的所有实现都需要支持
XMLConstants.ACCESS_EXTERNAL_DTD
和XMLConstants.ACCESS_EXTERNAL_SCHEMA
属性。- 设置
XMLConstants.ACCESS_EXTERNAL_DTD
属性会限制对外部DTD的访问,外部实体引用属性指定的协议。 如果由于此属性的限制而在解析期间拒绝访问,则SAXException
将由DocumentBuilder
定义的解析方法抛出。 - 设置
XMLConstants.ACCESS_EXTERNAL_SCHEMA
字段会将 schemaLocation属性设置的外部架构的访问权限限制为属性指定的协议。 如果由于此属性的限制而在解析期间拒绝访问,则SAXException
将定义的解析方法将抛出SAXException
。
- 参数
-
name
- 属性的名称。 -
value
- 属性的值。 - 异常
-
IllegalArgumentException
- 如果底层实现无法识别该属性,则抛出此异常。
- 设置
-
getAttribute
public abstract Object getAttribute(String name) throws IllegalArgumentException
允许用户检索底层实现的特定属性。- 参数
-
name
- 属性的名称。 - 结果
- value属性的值。
- 异常
-
IllegalArgumentException
- 如果底层实现无法识别该属性,则抛出此异常。
-
setFeature
public abstract void setFeature(String name, boolean value) throws ParserConfigurationException
设置此工厂创建的DocumentBuilderFactory
和DocumentBuilder
的功能。功能名称完全限定
URI
s。 实现可以定义自己的功能。 一个ParserConfigurationException
如果这是抛出DocumentBuilderFactory
或DocumentBuilder
的IT创建不支持该功能。DocumentBuilderFactory
可能会公开特征值但无法更改其状态。所有实现都需要支持
XMLConstants.FEATURE_SECURE_PROCESSING
功能。 当功能是:-
true
:实现将限制XML处理以符合实现限制。 示例包括实体扩展限制和消耗大量资源的XML Schema构造。 如果出于安全原因限制XML处理,则将通过调用已注册的ErrorHandler.fatalError(SAXParseException exception)
来报告。 见DocumentBuilder.setErrorHandler(org.xml.sax.ErrorHandler errorHandler)
。 -
false
:实现将根据XML规范处理XML,而不考虑可能的实现限制。
- 参数
-
name
- 功能名称。 -
value
- 功能状态为true
或false
。 - 异常
-
ParserConfigurationException
- 如果这个DocumentBuilderFactory
或它创建的DocumentBuilder
不能支持此功能。 -
NullPointerException
- 如果name
参数为null。 - 从以下版本开始:
- 1.5
-
-
getFeature
public abstract boolean getFeature(String name) throws ParserConfigurationException
获取指定功能的状态。功能名称完全限定
URI
s。 实现可以定义自己的功能。 一个ParserConfigurationException
如果这是抛出DocumentBuilderFactory
或DocumentBuilder
的IT创建不支持该功能。DocumentBuilderFactory
可能会公开某个功能值但无法更改其状态。- 参数
-
name
- 功能名称。 - 结果
- 命名功能的状态。
- 异常
-
ParserConfigurationException
- 如果这个DocumentBuilderFactory
或它创建的DocumentBuilder
不能支持此功能。 - 从以下版本开始:
- 1.5
-
getSchema
public Schema getSchema()
获取通过setSchema(Schema schema)
方法指定的Schema
对象。- 结果
-
最后通过
setSchema(Schema)
方法设置的Schema
对象,如果自创建DocumentBuilderFactory
后未调用该方法,则返回null。 - 异常
-
UnsupportedOperationException
- 实现未覆盖此方法时。 - 从以下版本开始:
- 1.5
-
setSchema
public void setSchema(Schema schema)
设置要从此工厂创建的解析器使用的Schema
。当
Schema
为非null时,解析器将使用从其创建的验证程序在将信息传递给应用程序之前验证文档。当验证程序发现错误时,解析器负责将它们报告给用户指定的
ErrorHandler
(或者如果未设置错误处理程序,则忽略它们或抛出它们),就像解析器本身找到的任何其他错误一样。 换句话说,如果设置了用户指定的ErrorHandler
,它必须接收这些错误,如果没有,则必须根据特定于实现的默认错误处理规则来处理它们。验证器可以修改解析的结果(例如,通过添加文档中缺少的默认值),并且解析器负责确保应用程序将接收修改的DOM树。
最初,null设置为
Schema
。即使
isValidating()
方法返回false
此处理也将生效。将
http://java.sun.com/xml/jaxp/properties/schemaSource
属性和/或http://java.sun.com/xml/jaxp/properties/schemaLanguage
属性与Schema
对象结合使用是错误的 。 这样的配置将导致ParserConfigurationException
的时候例外newDocumentBuilder()
被调用。实现者注意事项
解析器必须能够使用任何
Schema
实现。 但是,允许解析器和模式使用特定于实现的自定义机制,只要它们产生规范中描述的结果即可。- 参数
-
schema
-Schema
使用或null
删除架构。 - 异常
-
UnsupportedOperationException
- 当实现未覆盖此方法时。 - 从以下版本开始:
- 1.5
-
setXIncludeAware
public void setXIncludeAware(boolean state)
设置XInclude处理的状态。如果在文档实例中找到XInclude标记,是否应按XML Inclusions (XInclude) Version 1.0中的指定进行处理。
XInclude处理默认为
false
。- 参数
-
state
- 将XInclude处理设置为true
或false
- 异常
-
UnsupportedOperationException
- 当实现未覆盖此方法时。 - 从以下版本开始:
- 1.5
-
isXIncludeAware
public boolean isXIncludeAware()
获取XInclude处理的状态。- 结果
- XInclude处理的当前状态
- 异常
-
UnsupportedOperationException
- 实现未覆盖此方法时。 - 从以下版本开始:
- 1.5
-
-