【问题标题】:Remove space in between doctype in XML using XSLT使用 XSLT 删除 XML 中 doctype 之间的空格
【发布时间】:2017-09-12 08:51:27
【问题描述】:

在使用 XSLT 将 XML 转换为 XML 时,我在输出 XML 中包含了 doctype。但是在输出 XML 文档类型声明中会创建一个换行符。

XSLT:

<xsl:output method="xml" doctype-system="book3.dtd" doctype-public="-//Atypon//DTD test//EN" version="1.0" encoding="UTF-8" indent="no"/>

使用 XSLT 后输出 XML:

<!DOCTYPE book
  PUBLIC "-//Atypon//DTD test//EN" "book3.dtd">

在文档类型声明中的 book 和 public 之间创建空格和换行符。

我需要在一行中声明 doctype。

谁能帮我做这个?

【问题讨论】:

  • 那么为什么你需要在一行中声明 doctype 呢?
  • 是的,马丁。我需要单行声明
  • 这似乎取决于 XSLT 处理器。 Saxon 根据需要在两行中输出,xsltproc 在一行中输出。您使用的是什么 XSLT 处理器?
  • 我们使用的是撒克逊
  • 您使用的是 Saxon 的哪个版本? PE 和 EE 我认为支持saxon:line-lengthsaxonica.com/html/documentation/extensions/output-extras/…,尝试将其设置为高值是否可以避免 doctype 声明中的换行。

标签: xml xslt-2.0 saxon


【解决方案1】:

当您说“需要”它位于一行时,这意味着您必须使用解析器处理生成的 XML,该解析器对应该被视为无关紧要的事物(如可忽略的空白)赋予意义。

解决您的问题的正确方法是仅使用符合标准的 XML 解析器处理 XML,然后您无需尝试调整序列化格式以适应您的不符合标准的解析器施加的限制。

但是,Saxon 序列化程序旨在根据需要进行定制。调用Configuration.setSerializerFactory() 注册SerializerFactory 的子类,该子类覆盖newXMLEmitter() 方法以创建XMLEmitter 的子类,并在XMLEmitter 的子类中覆盖writeDocType() 方法以格式化DOCTYPE 声明随心所欲。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 2019-08-10
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多