如何阻止杰克逊解析元素?

问题描述

我有一个 XML 文档,其中包含不应被解释为 XML 标签的嵌套标签

例如这样的事情 <something>cba<a href="linktosomething.com">abc</a></something> 应该被解析为一个普通的字符串 "cba<a href="linktosomething.com">abc</a>" (应该提到文档还有其他元素可以很好地解析)。 Jackson tho 试图将其解释为 Object,但我不知道如何防止这种情况发生。我尝试使用 @JacksonXmlText关闭包装和自定义解串器,但我没有让它工作。

解决方法

<a 应转换为 &lt;a。这种来回转换通常发生在每个 XML API 中,设置和获取文本将使用这些实体 &...;

另一种选择是使用额外的 CDATA 部分:<![CDATA[ ... ]]>

<something><![CDATA[cba<a href="linktosomething.com">abc</a>]]></something>

如果您无法纠正该问题,并且不得不忍受已经损坏的 XML 文本,您必须自己动手:

  1. 在字符串中加载错误的 XML
  2. 修复 XML
  3. 将 XML 字符串传递给 jackson

修复:

String xml = ...
xml = xml.replaceAll("<(/?a\\b[^>]*)>","&lt;$1&gt;"); // Links
StringReader in = new StringReader(xml);