【发布时间】:2015-01-28 23:21:09
【问题描述】:
我正在尝试解析来自第三方接口的包含非法字符的 XML 响应消息。请注意,这些回复不在我的控制范围内。
以下是修改后的示例响应
<?xml version="1.0"?>
<response>
<data value="Example A" />
<data value="Example B" />
<data value="Example C" />
</response>
有时,“值”属性可能包含 ESC 控制字符 [0x1b],它用于(可能)指示要应用于值的特殊特征。
<?xml version="1.0"?>
<response>
<data value="[0x1b]Example A" />
<data value="Example B" />
</response>
我正在使用 libxml2 xmlParseMemory() 函数来尝试解析此响应。 http://www.xmlsoft.org/html/libxml-parser.html#xmlParseMemory
我调用函数如下:
xmlDocPtr doc = xmlParseMemory( buffer, size );
当响应 XML 有效时,我得到一个有效的 xmlDocPtr 并且可以继续使用它。如果响应包含非法字符,我会收到 NULL 并最终陷入死胡同。
有什么方法可以解析这些消息而不会收到错误并且不会丢弃非法字符?
【问题讨论】:
-
鉴于您正在处理固定响应,难道您不能在 XML 解析之前预处理原始消息文本,并用您自己的特殊文本模式替换 ESC 字符吗?
-
Peter M - 这是我的临时解决方法。该值是任意文本,因此我不会认为这种方法 100% 可靠。
-
我不确定,但 ESC 字符可能不是有效的 XML UTF-8 字符,因此预处理可能是您唯一真正的选择。