使用XSLT删除XML中doctype之间的空格

时间:2017-09-12 08:51:28

标签: xml xslt-2.0 saxon

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

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">

在doctype声明中,book和public之间创建了空格和换行符。

我需要在一行中使用doctype声明。

任何人都可以帮我这样做吗?

1 个答案:

答案 0 :(得分:2)

当你说你“需要”它在一行上时,这意味着你必须使用一个解析器来处理生成的XML,该解析器将重要性放在应该被视为无关紧要的事物(如可忽略的空格)上。

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

然而,如果您真的需要,Saxon序列化器可以自定义。调用Configuration.setSerializerFactory()注册SerializerFactory的子类,该子类覆盖newXMLEmitter()方法以创建XMLEmitter的子类,并在XMLEmitter的子类中覆盖{ {1}}方法以您希望的方式格式化DOCTYPE声明。