如何阻止杰克逊解析元素?
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
应翻译为 <a
。这种来回转换通常在每个 XML API 时发生,设置和获取文本将使用这些实体 &...;
.
另一种选择是使用额外的 CDATA 部分:<![CDATA[ ... ]]>
。
<something><![CDATA[cba<a href="linktosomething.com">abc</a>]]></something>
如果您无法更正它,并且不得不忍受已经损坏的 XML 文本,您必须自己动手:
- 在字符串中加载错误的 XML
- 修复XML
- 将 XML 字符串传递给 jackson
正在修复:
String xml = ...
xml = xml.replaceAll("<(/?a\b[^>]*)>", "<>"); // Links
StringReader in = new StringReader(xml);
我有一个 XML 文档,其中包含不应被解释为 XML 标签的嵌套标签
例如像这样的东西
<something>cba<a href="linktosomething.com">abc</a></something>
应该被解析为一个普通的字符串 "cba<a href="linktosomething.com">abc</a>"
(应该提到的是文档还有其他元素可以很好地解析)。杰克逊试图将其解释为一个对象,但我不知道如何防止这种情况发生。我尝试使用 @JacksonXmlText
,关闭包装和自定义反序列化器,但我没有让它工作。
<a
应翻译为 <a
。这种来回转换通常在每个 XML API 时发生,设置和获取文本将使用这些实体 &...;
.
另一种选择是使用额外的 CDATA 部分:<![CDATA[ ... ]]>
。
<something><![CDATA[cba<a href="linktosomething.com">abc</a>]]></something>
如果您无法更正它,并且不得不忍受已经损坏的 XML 文本,您必须自己动手:
- 在字符串中加载错误的 XML
- 修复XML
- 将 XML 字符串传递给 jackson
正在修复:
String xml = ...
xml = xml.replaceAll("<(/?a\b[^>]*)>", "<>"); // Links
StringReader in = new StringReader(xml);