Module java.xml
Package javax.xml.stream

Class XMLOutputFactory

java.lang.Object
javax.xml.stream.XMLOutputFactory

public abstract class XMLOutputFactory extends Object
定义了一个用于获取XMLEventWriters和XMLStreamWriters的工厂的抽象实现。以下表格定义了此规范的标准属性。每个属性在每个实现中所需的支持级别不同。所需的支持级别在“Required”列中描述。
配置参数
属性名称 行为 返回类型 默认值 必需
javax.xml.stream.isRepairingNamespaces 在输出端默认前缀 布尔值 False

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

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

此属性指定了写入器默认的命名空间前缀声明。默认值为false。

如果写入器isRepairingNamespaces,它将为当前StartElement上的任何属性创建一个命名空间声明,该属性当前在范围内没有命名空间声明。如果StartElement具有uri但未指定前缀,则将分配前缀,如果前缀未在当前StartElement的父级中声明,则将在当前StartElement上声明它。如果defaultNamespace已绑定且在范围内,并且默认命名空间与属性或StartElement QName的URI匹配,则不会分配前缀。

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

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

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

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

自版本:
1.6
参见:
  • Field Details

    • IS_REPAIRING_NAMESPACES

      public static final String IS_REPAIRING_NAMESPACES
      用于在输出端设置前缀默认值的属性
      参见:
  • Constructor Details

    • XMLOutputFactory

      protected XMLOutputFactory()
      保护构造函数,防止实例化。请改用newFactory()
  • Method Details

    • newDefaultFactory

      public static XMLOutputFactory newDefaultFactory()
      创建XMLOutputFactory内置系统默认实现的新实例。
      返回:
      XMLOutputFactory内置系统默认实现的新实例。
      自版本:
      9
    • newInstance

      public static XMLOutputFactory newInstance() throws FactoryConfigurationError
      以与newFactory()方法完全相同的方式创建工厂的新实例。
      返回:
      XMLOutputFactory的一个实例
      抛出:
      FactoryConfigurationError - 如果无法加载此工厂的实例
    • newFactory

      public static XMLOutputFactory newFactory() throws FactoryConfigurationError
      创建工厂的新实例。此方法使用XMLOutputFactory实现类的JAXP查找机制来确定要加载的实现类。

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

      返回:
      XMLOutputFactory的一个实例
      抛出:
      FactoryConfigurationError - 如果存在服务配置错误或者实现不可用或无法实例化。
    • newInstance

      @Deprecated(since="1.7") public static XMLInputFactory newInstance(String factoryId, ClassLoader classLoader) throws FactoryConfigurationError
      Deprecated.
      This method has been deprecated because it returns an instance of XMLInputFactory, which is of the wrong class. Use the new method newFactory(java.lang.String, java.lang.ClassLoader) instead.
      创建工厂的新实例。
      参数:
      factoryId - 要查找的工厂的名称,与属性名称相同
      classLoader - 要使用的类加载器
      返回:
      工厂实现
      抛出:
      FactoryConfigurationError - 如果无法加载此工厂的实例
    • newFactory

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

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

      • 使用由factoryId标识的系统属性的值。
      • 使用配置文件中设置的属性factoryId的值,默认情况下为jaxp.properties。如果文件存在并且文件中指定了属性factoryId,则其值将用作实现类。

      • 如果factoryId为"javax.xml.stream.XMLOutputFactory",则使用由ClassLoader指定的ServiceLoader类定义的服务提供程序加载机制,尝试定位和加载使用指定ClassLoader的服务的实现。如果classLoader为null,则将应用默认加载机制:即,服务提供程序加载设施将使用当前线程的上下文类加载器来尝试加载服务。如果上下文类加载器为null,则将使用系统类加载器

      • 否则,抛出一个FactoryConfigurationError

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

      请注意,这是一个替代了已弃用的newInstance(String factoryId, ClassLoader classLoader)方法的新方法。原始方法错误地定义为返回XMLInputFactory。

      参数:
      factoryId - 要查找的工厂的名称,与属性名称相同
      classLoader - 要使用的类加载器
      返回:
      工厂实现
      抛出:
      FactoryConfigurationError - 如果存在服务配置错误或者实现不可用或无法实例化。
    • createXMLStreamWriter

      public abstract XMLStreamWriter createXMLStreamWriter(Writer stream) throws XMLStreamException
      创建一个写入到写入器的新XMLStreamWriter
      参数:
      stream - 要写入的写入器
      返回:
      XMLStreamWriter的一个实例
      抛出:
      XMLStreamException - 如果发生错误
    • createXMLStreamWriter

      public abstract XMLStreamWriter createXMLStreamWriter(OutputStream stream) throws XMLStreamException
      创建一个写入到流的新XMLStreamWriter
      参数:
      stream - 要写入的流
      返回:
      XMLStreamWriter的一个实例
      抛出:
      XMLStreamException - 如果发生错误
    • createXMLStreamWriter

      public abstract XMLStreamWriter createXMLStreamWriter(OutputStream stream, String encoding) throws XMLStreamException
      创建一个写入到流的新XMLStreamWriter
      参数:
      stream - 要写入的流
      encoding - 要使用的编码
      返回:
      XMLStreamWriter的实例
      抛出:
      XMLStreamException - 如果发生错误
    • createXMLStreamWriter

      public abstract XMLStreamWriter createXMLStreamWriter(Result result) throws XMLStreamException
      创建一个新的XMLStreamWriter,用于写入JAXP结果。此方法是可选的。
      参数:
      result - 要写入的结果
      返回:
      XMLEventWriter的实例
      抛出:
      UnsupportedOperationException - 如果此方法不受XMLOutputFactory支持
      XMLStreamException - 如果发生错误
    • createXMLEventWriter

      public abstract XMLEventWriter createXMLEventWriter(Result result) throws XMLStreamException
      创建一个新的XMLEventWriter,用于写入JAXP结果。此方法是可选的。
      参数:
      result - 要写入的结果
      返回:
      XMLEventWriter的实例
      抛出:
      UnsupportedOperationException - 如果此方法不受XMLOutputFactory支持
      XMLStreamException - 如果发生错误
    • createXMLEventWriter

      public abstract XMLEventWriter createXMLEventWriter(OutputStream stream) throws XMLStreamException
      创建一个新的XMLEventWriter,用于写入流
      参数:
      stream - 要写入的流
      返回:
      XMLEventWriter的实例
      抛出:
      XMLStreamException - 如果发生错误
    • createXMLEventWriter

      public abstract XMLEventWriter createXMLEventWriter(OutputStream stream, String encoding) throws XMLStreamException
      创建一个新的XMLEventWriter,用于写入流
      参数:
      stream - 要写入的流
      encoding - 要使用的编码
      返回:
      XMLEventWriter的实例
      抛出:
      XMLStreamException - 如果发生错误
    • createXMLEventWriter

      public abstract XMLEventWriter createXMLEventWriter(Writer stream) throws XMLStreamException
      创建一个新的XMLEventWriter,用于写入写入器
      参数:
      stream - 要写入的流
      返回:
      XMLEventWriter的实例
      抛出:
      XMLStreamException - 如果发生错误
    • setProperty

      public abstract void setProperty(String name, Object value) throws IllegalArgumentException
      允许用户在底层实现上设置特定功能/属性。
      参数:
      name - 属性的名称
      value - 属性的值
      抛出:
      IllegalArgumentException - 如果不支持该属性
    • getProperty

      public abstract Object getProperty(String name) throws IllegalArgumentException
      获取底层实现的功能/属性
      参数:
      name - 属性的名称
      返回:
      属性的值
      抛出:
      IllegalArgumentException - 如果不支持该属性
    • isPropertySupported

      public abstract boolean isPropertySupported(String name)
      查询此工厂支持的属性集。
      参数:
      name - 属性的名称(不能为空)
      返回:
      如果支持该属性则返回true,否则返回false