如何在java中将多个xml文件合并为一个字符串

时间:2012-07-03 09:35:38

标签: java xml

我有几个具有不同节点结构的xml文件。我想从每个xml文件中提取xml内容,并将前者(xml内容)存储为单个字符串。

我正在使用以下代码来实现它

   String xmlContent = FileUtils.readFileToString(new File("xyz"), "UTF-8");

但我面临以下错误

    [Fatal Error] :5616:15: The processing instruction target matching "[xX][mM][lL]" is not allowed.

搜索后我发现上述错误的发生是因为“”存在于xml内容之间。

我应该首先修改xml文件还是有其他办法处理这种情况?

3 个答案:

答案 0 :(得分:0)

使用文本编辑器编辑xml文件。在第一行的最开头,查找并删除任何前导空格。

xml的以下第一行在第一个“<”之前不得包含任何空格或字符在线。

<?xml version="1.0" encoding="UTF-8"?>

再次尝试导入。 参考http://www-01.ibm.com/support/docview.wss?uid=swg21262072

答案 1 :(得分:0)

  

我应该先修改xml文件......

是的,你应该。

  

......还有其他办法处理这种情况吗?

好吧,您可以尝试围绕XML无效的事实进行编程:

  • 如果问题很小并且是孤立的,您可以尝试对文件进行初始传递以“修复”它。然后使用常规XML解析器解析它。

  • 如果问题过于普遍,您可以尝试将XML视为文本,并尝试在不正确解析的情况下提取数据。

但这两种方法的问题在于,当您尝试做出失败时,您最终可能会收到错误或丢失的数据;例如因为XML以不同的方式变坏了。

因此,我的建议是使用文本编辑器手动修复XML(如果这是一次),或者获取创建它的人/任何人来解决问题。


顺便提一下,一旦修复了XML语法问题,您就可以使用XSLT来选择和合并XML文件。

答案 2 :(得分:0)

经过一些努力,我已将内容合并到一个xml文件中:)        以下方法删除xml编码节点并将xml文件字符串化。

 public String stringifyXmlFiles(String fileName) {
        File file = new File(fileName);
    String content = "";
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    try {
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(new FileInputStream(file));

        TransformerFactory tranFactory = TransformerFactory.newInstance();
        Transformer aTransformer = tranFactory.newTransformer();
        aTransformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
                "yes");
        aTransformer.setOutputProperty(OutputKeys.INDENT, "yes");
        Source src = new DOMSource(document);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        Result dest = new StreamResult(stream);
        aTransformer.transform(src, dest);
        content = stream.toString();
    } catch (ParserConfigurationException e) {
        logger.error(e.getMessage(), e);
    } catch (SAXException e) {
        logger.error(e.getMessage(), e);
    } catch (IOException e) {
        logger.error(e.getMessage(), e);
    } catch (TransformerConfigurationException e) {
        logger.error(e.getMessage(), e);
    } catch (TransformerException e) {
        logger.error(e.getMessage(), e);
    }
    return content;
   }