Transformer.transform()将第一个标记写在与<! - ?xml - >相同的行上

时间:2017-04-12 16:36:54

标签: java xml

当我使用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来实现这个目的?

1 个答案:

答案 0 :(得分:2)

此效果可能取决于您使用的是哪个XSLT处理器(因为有六个已实现JAXP API的处理器,告诉我们您使用Transformer.transform()调用它不会向我们提供此信息)。

您还需要告诉我们您是否正在设置<xsl:output indent="yes"/> - 您的输出“格式良好......并且缩进”这一事实并不能告诉我们这种方式。

一致性规则取决于您使用的XSLT版本。通常,序列化规则在规范的每个连续版本中都变得更加规范。

如果您正在使用indent="no",则不允许处理器在XML声明后插入空格,除非您的转换明确生成它(尽管我知道某些处理器会这样做)。这是因为,如果输出用作外部实体而不是完整文档,则此处的换行实际上是重要内容。实际上,当您设置standalone =“no”时,输出不能用作外部实体,但序列化规则不会考虑这一点。

如果你正在使用indent="yes",规则允许在这里添加空格,但它们不需要它 - 它由XSLT实现自行决定。