当我使用Transformer的transform()方法向XML写Document
时,生成的XML文档格式很好 - 所有元素都写在不同的行上并缩进。除了第一个元素与定义写在同一行上:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><first_element>
我希望拥有的只是<first_element>
就像下一行一样:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<first_element>
在将文件写入文件之前,有没有办法预先格式化XML来实现这个目的?
答案 0 :(得分:2)
此效果可能取决于您使用的是哪个XSLT处理器(因为有六个已实现JAXP API的处理器,告诉我们您使用Transformer.transform()
调用它不会向我们提供此信息)。
您还需要告诉我们您是否正在设置<xsl:output indent="yes"/>
- 您的输出“格式良好......并且缩进”这一事实并不能告诉我们这种方式。
一致性规则取决于您使用的XSLT版本。通常,序列化规则在规范的每个连续版本中都变得更加规范。
如果您正在使用indent="no"
,则不允许处理器在XML声明后插入空格,除非您的转换明确生成它(尽管我知道某些处理器会这样做)。这是因为,如果输出用作外部实体而不是完整文档,则此处的换行实际上是重要内容。实际上,当您设置standalone =“no”时,输出不能用作外部实体,但序列化规则不会考虑这一点。
如果你正在使用indent="yes"
,规则允许在这里添加空格,但它们不需要它 - 它由XSLT实现自行决定。