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