java解析xml失败_Java XML解析错误:在prolog中不允许使用内容

我的代码使用LSSerializer类编写一个XML文件:

DOMImplementation impl = doc.getImplementation();

DOMImplementationLS implLS = (DOMImplementationLS) impl.getFeature("LS","3.0");

LSSerializer ser = implLS.createLSSerializer();

String str = ser.writeToString(doc);

System.out.println(str);

String file = racine+"/"+p.getNom()+".xml";

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");

out.write(str);

out.close();XML是格式良好的,但是当我解析它时,出现错误。

解析代码:

File f = new File(racine+"/"+filename);

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse(f);

XPathFactory xpfactory = XPathFactory.newInstance();

XPath xp = xpfactory.newXPath();

String expression;

expression = "root/nom";

String nom = xp.evaluate(expression, doc);错误 :

[Fatal Error] Terray.xml:1:40: Content is not allowed in prolog.

9 août 2011 19:42:58 controller.MakaluController activatePatient

GRAVE: null

org.xml.sax.SAXParseException: Content is not allowed in prolog.

at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:249)

at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)

at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:208)

at model.MakaluModel.setPatientActif(MakaluModel.java:147)

at controller.MakaluController.activatePatient(MakaluController.java:59)

at view.ListePatientsPanel.jButtonOKActionPerformed(ListePatientsPanel.java:92)

...现在,通过一些研究,I found发现这个错误在XML的最开始就是一个“隐藏的”字符。

事实上,我可以通过手动创建一个XML文件来修复这个bug。

但是,XML写入中的错误在哪里? (当我尝试打印字符串时,在这之前没有空格

解决方案:更改序列化程序 h2>

我运行了一段时间的UTF-16编码解决方案,但它不是很稳定。

所以我找到了一个新的解决方案:更改XML文档的序列化程序,以便XML标头和文件编码之间的编码一致。 :

DOMSource domSource = new DOMSource(doc);

TransformerFactory tf = TransformerFactory.newInstance();

Transformer transformer = tf.newTransformer();

String file = racine+"/"+p.getNom()+".xml";

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");

transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

transformer.setOutputProperty(OutputKeys.INDENT,"yes");

transformer.transform(domSource, new StreamResult(out));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值