gpt4 book ai didi

c++ - 使用 libxml2 解析包含无效字符的 XML 属性

转载 作者:行者123 更新时间:2023-11-28 06:27:52 30 4
gpt4 key购买 nike

我正在尝试解析来自第三方接口(interface)的包含非法字符的 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 并在死胡同结束。

有什么方法可以在不收到错误且不丢弃非法字符的情况下解析这些消息?

最佳答案

你问的是无法回答的问题。假设您得到的不是 0x1B 字符,而是 \n?或者更糟的是,一个额外的 "?或者一个 \?任何产生无效 xml 的东西都会让 libxml2 窒息,因为它是一个 xml 解析器。而你产生的例子是无效的xml。如果你想让它解析无效的 xml,你需要确定它应该如何解析并修改 libxml2 或修改 xml 使其有效并稍后撤消损坏。它是无效 xml 的原因正是因为它不明显事情应该解析。

最好的解决方案是修复生成(所谓的)xml 的任何内容,以免生成损坏的 xml。

关于c++ - 使用 libxml2 解析包含无效字符的 XML 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28204317/

30 4 0
文章推荐: javascript - Parse - JavaScript 指针查询,从指针返回解析对象的问题
文章推荐: javascript - 谷歌应用程序脚本: Function to return an arrray of unique values between 2 two ranges
文章推荐: javascript - 如何在 HTML 中显示 js 变量值,
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com