如何返回序列化的XML文件(XOM文档),以便我可以在浏览器中显示它?

时间:2022-09-30 19:47:40

This prints my xml document on the console with pretty print.

这将在控制台上以漂亮的打印方式打印我的xml文档。

//writing output to a file    
Document writeDocument = new Document(document);
//Formatting the file
Serializer serializer = new Serializer(System.out, "UTF-8");
serializer.setIndent(4);
serializer.write(writeDocument);

I need to return the same xml document, so that I can display it in browser.

我需要返回相同的xml文档,以便我可以在浏览器中显示它。

1 个解决方案

#1


0  

I had the exact same requirement in one of my apps. You can do this by taking the serialized XOM document, wrapping it in code tags, and escaping the angle brackets. The example code below shows one way to do this:

我的一个应用程序中有完全相同的要求。您可以通过获取序列化的XOM文档,将其包装在代码标记中并转义尖括号来完成此操作。下面的示例代码显示了一种方法:

     public String getHTMLDoc(Document document) {
        try {
            // create a new div to hold your document
            StringBuilder sb = new StringBuilder("<div id=\"xom\" style=\"font-family: 'Courier New', monospace; white-space: pre-wrap\"><pre>\n");
            // Create an array of strings with one string for each line in the document
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            Serializer writer = new Serializer(bout, "UTF-8");
            writer.setIndent(4);
            writer.write(document);
            writer.flush();
            String xomString = bout.toString("UTF-8");
            String[] lines = xomString.split(writer.getLineSeparator());
            for (int i = 0; i < lines.length; i++) {
                sb.append(convertLine(lines[i]));
            }
            sb.append("</pre></div>\n");
        } catch (IOException ex) {
            // handle the error
        }
        return sb.toString();
    }

    private String convertLine(String s) {
        // wrap the line in a code tag
        StringBuilder sb = new StringBuilder("<code>");
        // Remove trailing whitespace
        Pattern trailingWhiteSpace = Pattern.compile("[ \t\n\f\r]+$");
        Matcher m = trailingWhiteSpace.matcher(s);
        sb.append(m.replaceAll(""));
        // Change all angle brackets "<" and ">"
        sb.append(line.replaceAll(">", "&gt;").replaceAll("<", "&lt;"));
        sb.append("</code>\n");
        return sb.toString();
    }

#1


0  

I had the exact same requirement in one of my apps. You can do this by taking the serialized XOM document, wrapping it in code tags, and escaping the angle brackets. The example code below shows one way to do this:

我的一个应用程序中有完全相同的要求。您可以通过获取序列化的XOM文档,将其包装在代码标记中并转义尖括号来完成此操作。下面的示例代码显示了一种方法:

     public String getHTMLDoc(Document document) {
        try {
            // create a new div to hold your document
            StringBuilder sb = new StringBuilder("<div id=\"xom\" style=\"font-family: 'Courier New', monospace; white-space: pre-wrap\"><pre>\n");
            // Create an array of strings with one string for each line in the document
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            Serializer writer = new Serializer(bout, "UTF-8");
            writer.setIndent(4);
            writer.write(document);
            writer.flush();
            String xomString = bout.toString("UTF-8");
            String[] lines = xomString.split(writer.getLineSeparator());
            for (int i = 0; i < lines.length; i++) {
                sb.append(convertLine(lines[i]));
            }
            sb.append("</pre></div>\n");
        } catch (IOException ex) {
            // handle the error
        }
        return sb.toString();
    }

    private String convertLine(String s) {
        // wrap the line in a code tag
        StringBuilder sb = new StringBuilder("<code>");
        // Remove trailing whitespace
        Pattern trailingWhiteSpace = Pattern.compile("[ \t\n\f\r]+$");
        Matcher m = trailingWhiteSpace.matcher(s);
        sb.append(m.replaceAll(""));
        // Change all angle brackets "<" and ">"
        sb.append(line.replaceAll(">", "&gt;").replaceAll("<", "&lt;"));
        sb.append("</code>\n");
        return sb.toString();
    }