Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSLT删除XML中doctype之间的空格_Xml_Xslt 2.0_Saxon - Fatal编程技术网

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

使用XSLT删除XML中doctype之间的空格,xml,xslt-2.0,saxon,Xml,Xslt 2.0,Saxon,在使用XSLT将XML转换为XML时,我在输出XML中包含了doctype。但是在输出XML doctype声明中创建了一个换行符 XSLT: 使用XSLT后输出XML: <!DOCTYPE book PUBLIC "-//Atypon//DTD test//EN" "book3.dtd"> 在doctype声明中,在book和public之间创建空格和换行符 我需要一行doctype声明 有人能帮我做这件事吗?当你说“需要”它在一行上时,这意味着你必须使用一个解析器来

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

XSLT:


使用XSLT后输出XML:

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

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

我需要一行doctype声明

有人能帮我做这件事吗?

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

解决问题的正确方法是只使用一致的XML解析器处理XML,这样就不需要尝试调整序列化格式以适应非一致性解析器施加的限制

但是,Saxon序列化程序的设计是为了在必要时进行定制。调用
Configuration.setSerializerFactory()
注册
SerializerFactory
的子类,该子类重写
newXMLEmitter()
方法以创建
XMLEmitter
的子类,并在
XMLEmitter
的子类中重写
WriteDoctType()
方法以您想要的方式格式化DOCTYPE声明。

当您说“需要”它在一行上时,这意味着您必须使用一个解析器来处理生成的XML,该解析器将重要的内容(如可忽略的空白)附加到应该被视为无关紧要的内容上

解决问题的正确方法是只使用一致的XML解析器处理XML,这样就不需要尝试调整序列化格式以适应非一致性解析器施加的限制


但是,Saxon序列化程序的设计是为了在必要时进行定制。调用
Configuration.setSerializerFactory()
注册
SerializerFactory
的子类,该子类重写
newXMLEmitter()
方法以创建
XMLEmitter
的子类,并在
XMLEmitter
的子类中重写
WriteDoctType()
方法,以您想要的方式格式化DOCTYPE声明。

那么,为什么您需要将DOCTYPE声明放在一行中呢?是的。我需要单行声明,这似乎取决于XSLT处理器
Saxon
根据需要在两行中输出,并在一行中输出
xsltproc
。您使用的是什么XSLT处理器?我们使用的是Saxon,您使用的是Saxon的哪个版本和版本?我认为PE和EE支持
saxon:line length
,请尝试将其设置为高值是否可以避免doctype声明中的换行。那么,为什么需要在单行中使用doctype声明呢?是的。我需要单行声明,这似乎取决于XSLT处理器
Saxon
根据需要在两行中输出,并在一行中输出
xsltproc
。您使用的是什么XSLT处理器?我们使用的是Saxon,您使用的是Saxon的哪个版本和版本?我认为PE和EE支持
saxon:line length
,请尝试将其设置为高值是否可以避免doctype声明中的换行。
<!DOCTYPE book
  PUBLIC "-//Atypon//DTD test//EN" "book3.dtd">