1

我有几个具有不同节点结构的 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 文件还是有其他方法来处理这种情况?

4

3 回答 3

1

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

xml 的以下第一行在该行的第一个“<”之前不能有任何空格或字符。

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

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

于 2012-07-03T09:45:55.517 回答
0

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

是的你应该。

...还有其他方法可以处理这种情况吗?

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

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

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

但是这两种方法的问题在于,当你试图做好事失败时,你最终可能会得到错误或丢失的数据。例如,因为 XML 以不同的方式变坏了。

所以我的建议是要么使用文本编辑器(如果这是一次)手动修复 XML,要么让创建它的人/任何人从源头解决问题。


顺便说一句,一旦您解决了 XML 语法问题,您就可以只使用 XSLT 来挑选和合并 XML 文件。

于 2012-07-03T09:46:40.063 回答
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;
   }
于 2012-07-04T03:24:18.580 回答