处理序列化时处理无效的xml字符

时间:2013-12-19 11:51:10

标签: java xml

我需要在哪里需要序列化包含ンᅧᅭ%ンᅨ&之类字符串的文档。序列化时抛出以下异常:

java.io.IOException: The character '' is an invalid XML character

有没有办法可以像任何解决方法那样序列化这个String?

StringWriter stringOut = new StringWriter();
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("company");
doc.appendChild(rootElement);
String xml = "ンᅧᅭ%ンᅨ&";
//String xml = "ンᅧᅭ%ンᅨ&";
Element junk = doc.createElement("replyToQ");
junk.appendChild(doc.createCDATASection(xml));
//junk.appendChild(doc.createTextNode(stripNonValidXMLCharacters(xml)));
rootElement.appendChild(junk);

//org.w3c.dom.Document doc = this.toDOM();

//Serialize DOM
OutputFormat    format  = new OutputFormat(doc,"UTF-8",true);
format.setIndenting(false);
format.setLineSeparator("");
format.setPreserveSpace(true);
format.setOmitXMLDeclaration(false);

XMLSerializer    serial = new XMLSerializer( stringOut, format );
// As a DOM Serializer
serial.asDOMSerializer();

serial.serialize( doc.getDocumentElement() );

1 个答案:

答案 0 :(得分:1)

编辑:我将您的问题视为反序列化问题,而不是序列化问题。遗憾。

答案是你需要使用Uuicode实体转义字符串来转义它们。

字符变为ソ。见Japanese Katakana chart

另见XML Escaping


您需要预处理文件以正确转义xml字符。

  1. 读取文件中的每个字符
  2. 如果角色无效xml,escape it appropriately
  3. 将字符写入临时文件
  4. 在原始文件的末尾,用临时文件覆盖原始文件。
  5. 您的文件现在是有效的xml,可以通过标准方法进行解析。它很可能会更大。为您的文件供应商提供编写错误的xml编写器的信息;)