当前位置: 首页 > 知识库问答 >
问题:

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

庄兴发
2023-03-14

我需要序列化一个包含字符串的文档,如ンᅧᅭ%ンᅨ


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

有没有一种方法可以将此字符串序列化为任何解决方案?

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个答案

陶树
2023-03-14

编辑:我把你的问题理解为反序列化问题,而不是序列化问题。很抱歉

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

字符<代码>ン 变为

另请参见这里的XML转义

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

  1. 读取文件中的每个字符
  2. 如果字符是无效的xml,请适当转义它
  3. 将字符写入临时文件
  4. 在原始文件末尾,使用临时文件覆盖原始文件

您的文件现在是有效的xml,可以通过标准方式进行解析。它很可能会更大。给文件供应商一个关于编写错误xml编写器的警告;)

 类似资料:
  • 我正在尝试将用户输入存储在客户端(javascript)的XML文档中,并将其传输到服务器进行持久化。 例如,一个用户粘贴了包含STX字符(0x2)的文本。XMLSerializer没有转义STX字符,因此没有序列化为格式良好的XML。或者可能是这个。attr()调用应该转义STX字符,但在任何一种情况下,都会生成无效的XML。 我发现浏览器中XMLSerializer()的输出并不总是格式良好的

  • 问题内容: Eclipse JDT编译器似乎存在一个问题,在某些情况下,Java 8 lamda不能正确反序列化,而是抛出。我正在使用最新发布的维护版本,如下所示: 现有的Bug / SO条目报告了已(至少部分地)已解决的类似问题。我已经亲自验证以下问题已解决。 访问实例字段和方法的Java 8Lambda不能反序列化 https://bugs.eclipse.org/bugs/show_bug.

  • Eclipse JDT编译器似乎有一个问题,在某些情况下,Java8个lamda没有正确反序列化,而是抛出一个。我正在使用最近的分布式维护版本,如下所示: 现有的bug/SO条目报告了在中已经(至少部分)解决的类似问题。我亲自验证了以下问题已经得到解决。 无法反序列化访问实例字段和方法的Java 8 lambda https://bugs.eclipse.org/bugs/show_bug.cgi

  • 我正在尝试反序列化以 XML soap 格式接收的消息。以前这一直在工作,但由于源消息的更改,我现在遇到以下问题 我可以看到这是因为消息中的以下内容.... 我认为问题在于它试图将一个字符串数据类型赋值或“强制转换”到一个空字段上,因此抛出一个错误,指出该字段是一个对象,不能被识别为字符串。 我的问题是如何阻止反序列化程序首先尝试读取这个特定的空字段。这是我在使用Jackson的Java代码中声明

  • 本文向大家介绍C# JavaScriptSerializer序列化时的时间处理详解,包括了C# JavaScriptSerializer序列化时的时间处理详解的使用技巧和注意事项,需要的朋友参考一下 最近被序列化困扰了一下下。原因看下面代码 输出如下图所示: 猜测这里是由于js初始化时间的时候往往是向 1970/01/01 添加毫秒数,JavaScriptSerializer进行序列化的时候也会格

  • 总之,我正在尝试解析中的xml。但是XMLSpy告诉我xml的格式不好。 我相信这xml中包含了一些无效字符()。因为如果我把它拿走。XMLSpy的验证已通过。我认为UTF-8编码不允许这种字符。但是如果我真的想加入这种角色呢。我应该应用哪种编码?谢谢