我尝试使用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的文档之后,我相信有一个属性可以设置,用来重写反序列化功能。
如果需要转义这些特殊字符,怎么办?
1条答案
按热度按时间zsbz8rwp1#
因为the special role of ampersand character in XML,它必须是
"<cookies><![CDATA[Chocolate&Butter cocunut]]></cookies>"
形式括起来"<cookies>Chocolate&Butter cocunut</cookies>"
两者都是Jackson和底层Woodstox可以解析的有效XML字符串。
另请参阅XML规范2.4字符数据和标记:
与号字符(&)和左尖括号(〈)不得以其文字形式出现,除非用作标记分隔符,或者在注解、处理指令或CDATA节中使用。如果在其他地方需要它们,必须分别使用数字字符引用或字符串“&“和“〈“进行转义。右尖括号(〉)可以使用字符串“〉“表示,并且为了兼容,当它出现在内容中的字符串“]]〉“中时,如果该字符串没有标记CDATA节的结尾,则必须使用“〉“或字符引用进行转义。
相关问题: