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

How to stop Jackson from parsing an element?

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

例如像这样的东西 <something>cba<a href="linktosomething.com">abc</a></something> 应该被解析为一个普通的字符串 "cba<a href="linktosomething.com">abc</a>" (应该提到的是文档还有其他元素可以很好地解析)。杰克逊试图将其解释为一个对象,但我不知道如何防止这种情况发生。我尝试使用 @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;&gt;"); // Links
StringReader in = new StringReader(xml);