在使用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声明。
任何人都可以帮我这样做吗?
答案 0 :(得分:2)
当你说你“需要”它在一行上时,这意味着你必须使用一个解析器来处理生成的XML,该解析器将重要性放在应该被视为无关紧要的事物(如可忽略的空格)上。
问题的正确解决方案是仅使用符合要求的XML解析器处理XML,然后您不需要尝试调整序列化格式以适应不符合要求的解析器所施加的限制。
然而,如果您真的需要,Saxon序列化器可以自定义。调用Configuration.setSerializerFactory()
注册SerializerFactory
的子类,该子类覆盖newXMLEmitter()
方法以创建XMLEmitter
的子类,并在XMLEmitter
的子类中覆盖{ {1}}方法以您希望的方式格式化DOCTYPE声明。