Java Transformer.transform()将第一个标记写入与<;相同的行中;?xml>;

Java Transformer.transform()将第一个标记写入与<;相同的行中;?xml>;,java,xml,Java,Xml,当我使用Transformer的transform()方法将文档写入XML时,生成的XML文档格式很好——所有元素都写在单独的行上并缩进。除了第一个元素与定义写在同一行之外: 我想要的只是下一行的,如下所示: 在将XML写入文件之前,是否有任何方法可以预处理XML以完成此任务?此效果可能取决于您使用的XSLT处理器(因为有六个处理器已经实现了JAXP API,告诉我们您使用Transformer.transform()调用它,但没有提供此信息) 您还需要告诉我们您是否正在设置——您的输出“

当我使用Transformer的transform()方法将
文档
写入XML时,生成的XML文档格式很好——所有元素都写在单独的行上并缩进。除了第一个元素与定义写在同一行之外:

我想要的只是下一行的
,如下所示:


在将XML写入文件之前,是否有任何方法可以预处理XML以完成此任务?

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

您还需要告诉我们您是否正在设置
——您的输出“格式很好……并且缩进”这一事实并不能告诉我们这是一种方式还是另一种方式

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

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


如果您使用的是
indent=“yes”
,则规则允许在此处添加空格,但它们并不需要,而是由XSLT实现自行决定

你能分享你用来设置xml版本的代码吗?老实说,我不明白XSLT处理器是什么。如果Transformer类属于哪个库的问题是
javax.xml.transform.Transformer
。回到我原来的问题,我没有使用缩进属性,一旦我将它设置为“是”,它就解决了问题——第一个元素被写在新行上。非常感谢你!如果您不知道使用的是哪个XSLT处理器,那么可能是JDK附带的非常古老的Xalan版本。它已经15年没有进行过重大更新,不支持XSLT2.0,更不用说XSLT3.0了。