模块  java.xml
软件包  javax.xml.stream

Class XMLOutputFactory


  • public abstract class XMLOutputFactory
    extends Object
    定义用于获取XMLEventWriters和XMLStreamWriters的工厂的抽象实现。 下表定义了此规范的标准属性。 每个属性的每个实现所需的支持级别各不相同。 所需的支持级别在“必需”列中描述。 Configuration Parameters Property Name Behavior Return type Default Value Required javax.xml.stream.isRepairingNamespaces defaults prefixes on the output side Boolean False Yes

    以下段落描述了命名空间和前缀修复算法:

    可以使用以下代码行设置该属性: setProperty("javax.xml.stream.isRepairingNamespaces", new Boolean(true|false));

    此属性指定writer默认名称空间前缀声明。 默认值为false。

    如果writer是RepairingNamespaces,它将在当前StartElement上为当前在作用域中没有名称空间声明的任何属性创建名称空间声明。 如果StartElement具有uri但未指定前缀,则将分配前缀,如果尚未在当前StartElement的父级中声明前缀,则将在当前StartElement上声明前缀。 如果defaultNamespace绑定并且在范围内,并且默认命名空间与属性的URI匹配,或者StartElement QName将不分配前缀。

    如果元素或属性名称具有前缀,但未绑定到任何名称空间URI,则序列化期间将删除前缀。

    如果同一个start或empty-element标记中的元素和/或属性名称绑定到不同的名称空间URI并使用相同的前缀,则元素或第一个出现的属性保留原始前缀,并且以下属性的前缀替换为绑定到这些属性的名称空间URI的新前缀。

    如果元素或属性名称使用的前缀绑定到与从该元素的父级的父级的上下文中继承的URI不同的URI,并且在当前元素的上下文中没有名称空间声明,则会添加此类名称空间声明。

    如果元素或属性名称绑定到前缀并且存在将该前缀绑定到不同URI的名称空间声明,则如果从该元素的父上下文继承正确的映射,或者将其更改为使用该前缀的元素或属性的名称空间URI。

    从以下版本开始:
    1.6
    另请参见:
    XMLInputFactoryXMLEventWriterXMLStreamWriter
    • 字段详细信息

      • IS_REPAIRING_NAMESPACES

        public static final String IS_REPAIRING_NAMESPACES
        用于在输出端设置前缀默认值的属性
        另请参见:
        常数字段值
    • 构造方法详细信息

      • XMLOutputFactory

        protected XMLOutputFactory()
    • 方法详细信息

      • newDefaultFactory

        public static XMLOutputFactory newDefaultFactory()
        创建 XMLOutputFactory内置系统默认实现的新实例。
        结果
        XMLOutputFactory内置系统默认实现的新实例。
        从以下版本开始:
        9
      • newFactory

        public static XMLOutputFactory newFactory()
                                           throws FactoryConfigurationError
        创建工厂的新实例。

        此静态方法创建新的工厂实例。 此方法使用以下有序查找过程来确定要加载的XMLOutputFactory实现类:

        • 使用javax.xml.stream.XMLOutputFactory系统属性。
        • 使用配置文件“stax.properties”。 该文件采用标准的Properties格式,通常位于Java安装的conf目录中。 它包含实现类的完全限定名称,键是上面定义的系统属性。

          stax.properties文件仅由实现读取一次,然后缓存其值以供将来使用。 如果在第一次尝试从该文件读取时该文件不存在,则不再进行任何检查以检查其是否存在。 在第一次读取之后,无法更改stax.properties中任何属性的值。

          使用jaxp配置文件“jaxp.properties”。 该文件的格式与stax.properties的格式相同,只有在stax.properties不存在时才会读取。

        • 使用由ServiceLoader类定义的服务提供者加载工具尝试使用default loading mechanism查找和加载服务的实现 :服务提供者加载工具将使用current thread's context class loader尝试加载服务。 如果上下文类加载器为null,则将使用system class loader

        • 否则,返回system-default实现。

        一旦应用程序获得对XMLOutputFactory的引用,它就可以使用工厂来配置和获取流实例。

        异常
        FactoryConfigurationError - 如果是service configuration error,或者实现不可用或无法实例化。
      • newFactory

        public static XMLOutputFactory newFactory​(String factoryId,
                                                  ClassLoader classLoader)
                                           throws FactoryConfigurationError
        创建工厂的新实例。 如果classLoader参数为null,则使用ContextClassLoader。

        此方法使用以下有序查找过程来确定要加载的XMLOutputFactory实现类:

        • 使用由factoryId标识的系统属性的值。
        • 使用配置文件“stax.properties”。 该文件采用标准的Properties格式,通常位于Java安装的conf目录中。 它包含实现类的完全限定名称,键是上面定义的系统属性。

          stax.properties文件仅由实现读取一次,然后缓存其值以供将来使用。 如果在第一次尝试从该文件读取时该文件不存在,则不再进行任何检查以检查其是否存在。 在第一次读取之后,无法更改stax.properties中任何属性的值。

          使用jaxp配置文件“jaxp.properties”。 该文件的格式与stax.properties的格式相同,只有在stax.properties不存在时才会读取。

        • 如果factoryId是“javax.xml.stream.XMLOutputFactory”,使用服务提供商装载设施,由定义ServiceLoader类,试图locate and load使用指定的服务的实现ClassLoader 如果classLoader为null,则应用default loading mechanism :即,服务提供者加载工具将使用current thread's context class loader尝试加载服务。 如果上下文类加载器为null,则将使用system class loader

        • 否则,抛出一个FactoryConfigurationError

        API Note:
        此处定义的参数factoryId与其他JAXP工厂的参数不一致,其中第一个参数是提供工厂实现的完全限定工厂类名。

        请注意,这是一种替换已弃用的newInstance(String factoryId, ClassLoader classLoader)方法的新方法。 原始方法未正确定义以返回XMLInputFactory。

        参数
        factoryId - 要查找的工厂的名称,与属性名称相同
        classLoader - 要使用的classLoader
        结果
        工厂实施
        异常
        FactoryConfigurationError - 如果是service configuration error,或者实现不可用或无法实例化。
      • isPropertySupported

        public abstract boolean isPropertySupported​(String name)
        查询此工厂支持的属性集。
        参数
        name - 属性名称(不得为null)
        结果
        true if the property is supported and false otherwise