我正在尝试将XML文件转换为如下文档:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("C:/xml/41111208890622000144550010000000011000003066-nfe.xml");
Document document = db.parse(new InputSource(new StringReader("C:/xml/41111208890622000144550010000000011000003066-nfe.xml")));
但它提供了错误消息:
Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1;
有人知道该怎么做?
答案 0 :(得分:4)
您目前正在创建包含字符串
的阅读器"C:/xml/41111208890622000144550010000000011000003066-nfe.xml"
并要求DocumentBuilder
解析它就好像它是XML,当它显然不是。 (我指的是第二个parse
调用,我怀疑它是你实际代码中的调用。你提供的代码不能编译,因为你已经声明了document
两次。)< / p>
你可以创建一个FileInputStream
或者InputStreamReader
包围它:
String filename = "C:/xml/41111208890622000144550010000000011000003066-nfe.xml";
try (FileInputStream input = new FileInputStream(filename))
{
Document document = db.parse(new InputSource(input));
}
(我更喜欢直接使用流,让解析器检测编码。)
现在这个电话:
Document document = db.parse("C:/xml/...");
将几乎工作,并且实际工作,使用DocumentBuilder.parse(String)
- 这取决于parse
是否乐意将文件名作为URI处理。 (我已经看到一些很好的XML API,有些则没有。)如果它不起作用,请尝试使用file://
方案:
Document document = db.parse("file://C:/xml/...");