Java Transformer语言 - 跳过 DTD 中具有默认值的属性



我正在尝试使用 Java 转换器将空格正确添加到我的 XML 流中。 它确实正确格式化了它,但我的 DTD 对我的"页面"元素属性有以下定义:

<!ATTLIST page 
      title CDATA #REQUIRED
      subtitle CDATA #IMPLIED
      classifier CDATA #IMPLIED
      pagenum CDATA #IMPLIED
      border CDATA "false">

问题出在边框属性上。 当XMLStreamWriter被写出来时,我有一个这样的值:

<page title="Belgium">...</page>

但是当我在其上调用转换器时,它会正确格式化元素,但它添加了"border"属性:

<page title="Belgium" border="false">
    ...
</page>

有没有办法在转换器中指定"跳过"写入具有默认值的属性(如果未指定)?

注意:我知道我应该转换为XSD(这个DTD可以追溯到很久以前)。 我也可以修改边框以 #IMPLIED 因为我不再真正使用它了(即。我可以在读取此 XML 的代码中暗示它是假的,除非指定)

解决 方案?

遗憾的是,XSLT 1.0 不知道哪些值来自实例文档,哪些值来自 DTD 或架构中的默认值。我不确定XSLT 2.0是否将其添加到其数据集中。

撒克逊人对此有一个选项:-expand:off

http://www.saxonica.com/documentation/index.html#!using-xsl/commandline

如果您使用的是 Java API,则等效值为 FeatureKeys.EXPAND_ATTRIBUTE_DEFAULTS,您可以将其作为选项提供给 JAXP 中的 TransformerFactory。

最新更新