Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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
带有正确格式注释的JAVA漂亮打印XML_Java_Xml_Xml Parsing - Fatal编程技术网

带有正确格式注释的JAVA漂亮打印XML

带有正确格式注释的JAVA漂亮打印XML,java,xml,xml-parsing,Java,Xml,Xml Parsing,我在尝试使用格式正确的注释漂亮地打印xml时遇到了一个问题。我从一个进程生成一个xml文件,需要向xml文档添加头信息。此标题信息的格式为xml注释 生成的文件如下所示: <Messages><Message Name="Foo">FooMessage</Message><Message Name="Bar">BarMessage</Message></Messages> FooMessageBarMessage 生成的

我在尝试使用格式正确的注释漂亮地打印xml时遇到了一个问题。我从一个进程生成一个xml文件,需要向xml文档添加头信息。此标题信息的格式为xml注释

生成的文件如下所示:

<Messages><Message Name="Foo">FooMessage</Message><Message Name="Bar">BarMessage</Message></Messages>
FooMessageBarMessage
生成的文件来自不同的进程,在该进程中,我无法修改其输出内容。生成xml文件后,我需要在数据上方添加一些注释。完成后,输出应如下所示:

<xml version="1.0" encoding="us-ascii">
<!-- Message Documentation -->
<!-- Version 1.0 -->
<Messages>
  <Message Name="Foo">FooMessage</Message>
  <Message Name="Bar">BarMessage</Message>
</Messages>

食物信息
条形码
但在我通过transformer运行它以漂亮地打印xml之后,它会导致注释被压缩到一行:

<xml version="1.0" encoding="us-ascii">
<!-- Message Documentation --><!-- Version 1.0 -->
<Messages>
  <Message Name="Foo">FooMessage</Message>
  <Message Name="Bar">BarMessage</Message>
</Messages>

食物信息
条形码
标题只是一个包含注释的文件:

<!-- Message Documentation -->
<!-- Version 1.0 -->

这就是我目前正在做的(注意messages.xml是生成的文件):

public static void generate()引发异常{
List header=Files.readAllLines(path.get(“header.xml”);
List message=Files.readAllLines(path.get(“messasges.xml”);
StringBuilder sb=新的StringBuilder();
for(字符串s:标题){
sb.append(字符串格式(“%s%n”,s));
}
for(字符串s:消息){
sb.append(字符串格式(“%s%n”,s));
}
write(path.get(“tmp.xml”)、sb.toString.getBytes()、StandardOpenOption.CREATE、StandardOpenOption.TRUNCATE_EXISTING);
DocumentBuilder db=DocumentBuilderFactor.newInstance().newDocumentBuilder();
Document doc=db.parse(path.get(“tmp.xml”).toFile());
字符串xmlStr=预打印(doc);
}
公共静态字符串预打印(文档文档)引发异常{
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT,“是”);
transformer.setOutputProperty(“{http://xml.apache.org/xslt}缩进金额”,4);
setOutputProperty(OutputKeys.ENCODING,“us ascii”);
setOutputProperty(OutputKeys.OMIT_XML_声明,“no”);
setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,“是”);
DOMSource=新的DOMSource(doc);
StringWriter编写器=新的StringWriter();
StreamResult结果=新的StreamResult(writer);
变换(源、结果);
返回writer.getBuffer().toString();
}

如果您能提供任何帮助,我将不胜感激,因为我无法找到任何关于在各自行中保留评论的信息。

恐怕您无法通过设置实现这一点。 使用一点蛮力:

    return writer.getBuffer().toString().replaceAll("--><", "-->\n<");
return writer.getBuffer().toString().replaceAll(“-->\nhas method
U.formatXml(string)
。我是项目的维护者

导入com.github.underline.lodash.U;
公共类MyClass{
公共静态void main(字符串参数[]){
System.out.println(U.formatXml(“\n”
+“\n”
+“\n”
+“\n”
+“FooMessage\n”
+“BarMessage\n”
+ ""));
}
}
输出:

<?xml version="1.0" encoding="us-ascii"?>
<!-- Message Documentation -->
<!-- Version 1.0 -->
<Messages>
   <Message Name="Foo">FooMessage</Message>
   <Message Name="Bar">BarMessage</Message>
</Messages>

食物信息
条形码

你能告诉我标题和消息的内容吗?我在op中添加了一个编辑
import com.github.underscore.lodash.U;

public class MyClass {
    public static void main(String args[]) {
        System.out.println(U.formatXml("<?xml version=\"1.0\" encoding=\"us-ascii\"?>\n"
          + "<!-- Message Documentation -->\n"
          + "<!-- Version 1.0 -->\n"
          + "<Messages>\n"
          + "  <Message Name=\"Foo\">FooMessage</Message>\n"
          + "  <Message Name=\"Bar\">BarMessage</Message>\n"
          + "</Messages>"));
    }
}
<?xml version="1.0" encoding="us-ascii"?>
<!-- Message Documentation -->
<!-- Version 1.0 -->
<Messages>
   <Message Name="Foo">FooMessage</Message>
   <Message Name="Bar">BarMessage</Message>
</Messages>