Jackson器错误- JsonParseException:意外字符'&'

dxxyhpgq  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(343)

我尝试使用fasterxml.jackson.xml.XmlMapper将XML字符串解析为Java对象。
问题是XML字符串包含字符“&”。
我得到一个异常

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Unexpected character '&' in prolog; expected '<'.

代码

import java.util.Map;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class MyProblem {
   public static void main(String[] args) {
      XmlMapper = xmlMapper = new XmlMapper();
      String myXML = "<cookies>Chocolate&Butter cocunut</cookies>";  
      Map<String, String> myTester = xmlMapper.reader().readValue(myXML, Map.class);
   }
}

我希望在执行System.out.println(myTester);时它能工作
在阅读XmlMapper的文档之后,我相信有一个属性可以设置,用来重写反序列化功能。
如果需要转义这些特殊字符,怎么办?

zsbz8rwp

zsbz8rwp1#

因为the special role of ampersand character in XML,它必须是

  • 或者以CDATA "<cookies><![CDATA[Chocolate&Butter cocunut]]></cookies>"形式括起来
  • 或作为HTML实体"<cookies>Chocolate&amp;Butter cocunut</cookies>"

两者都是Jackson和底层Woodstox可以解析的有效XML字符串。
另请参阅XML规范2.4字符数据和标记:
与号字符(&)和左尖括号(〈)不得以其文字形式出现,除非用作标记分隔符,或者在注解、处理指令或CDATA节中使用。如果在其他地方需要它们,必须分别使用数字字符引用或字符串“&“和“〈“进行转义。右尖括号(〉)可以使用字符串“〉“表示,并且为了兼容,当它出现在内容中的字符串“]]〉“中时,如果该字符串没有标记CDATA节的结尾,则必须使用“〉“或字符引用进行转义。
相关问题:

相关问题