我正在尝试从包含非法字符的第三方界面解析XML响应消息。请注意,这些回复不在我的控制之内。
以下是修改后的示例响应
<?xml version="1.0"?>
<response>
<data value="Example A" />
<data value="Example B" />
<data value="Example C" />
</response>
有时,“value”属性可能包含 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并在死胡同结束。
有没有办法解析这些邮件而不会收到错误并且不丢弃非法字符?
答案 0 :(得分:1)
你问无法回答的问题。假设您有一个0x1B
而不是\n
字符?或者更糟糕的是"
?还是\
?产生无效xml的任何东西都会使libxml2阻塞,因为它是一个xml解析器。你生成的例子是无效的xml。如果您希望它解析无效的xml,您需要确定它应该如何解析并修改libxml2或修改xml以使其有效并稍后撤消损坏。它是无效的xml的原因恰恰是因为这些事情应该解析的方式并不明显。
最好的解决方案是修复产生(声称的)xml的任何内容,以免产生破碎的xml。