有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中将XML文档复制到字符串变量中

我试图将整个XML文档标记名/标记类型复制到字符串变量中。要使用的语言是Java。我使用ReadAllText在C#中实现了这一点,但我需要在Java或其他语言中找到与该命令等效的命令,以便能够将整个XML文档作为字符串。我已经做了一段时间了。这是一个更大项目的一部分。这是唯一要做的事情。有什么建议吗? 提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    许多答案几乎都是正确的,但并不完全正确

    • 如果使用BufferedInputStream并读取行,则结果是缺少换行符
    • 如果使用BufferedReader或Scanner读取行,则结果是缺少原始行,编码可能错误
    • 如果在结果中使用Writer,则编码可能与源不匹配

    如果您确实了解源代码编码,您可以这样做:

    String file2string(File f, Charset cs) throws IOException {
        ByteArrayOutputStream out = new ByteArrayOutputStream(10000);
        InputStream in = new BufferedInputStream(new FileInputStream(f));
        int c;
        while ((c = in.read()) != -1)
            out.write(c);
        in.close();
        return out.toString(cs.name());
    }
    

    如果不知道源代码,请依靠XML解析器来检测并控制输出:

    String transform2String(File f, Charset cs) throws IOException,
            TransformerFactoryConfigurationError, TransformerException {
        Transformer t = TransformerFactory.newInstance().newTransformer();
        t.setOutputProperty(OutputKeys.ENCODING, cs.name());
        ByteArrayOutputStream out = new ByteArrayOutputStream(10000);
        t.transform(new StreamSource(new BufferedInputStream(
                new FileInputStream(f))), new StreamResult(out));
        return out.toString(cs.name());
    }
    
  2. # 2 楼答案

    请尝试以下代码:

    public String convertXMLFileToString(String fileName) 
    { 
        try { 
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
            InputStream inputStream = new FileInputStream(new File(fileName)); 
            org.w3c.dom.Document doc = documentBuilderFactory.newDocumentBuilder().parse(inputStream); 
            StringWriter stw = new StringWriter(); 
            Transformer serializer = TransformerFactory.newInstance().newTransformer(); 
            serializer.transform(new DOMSource(doc), new StreamResult(stw)); 
            return stw.toString(); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        return null; 
    }