You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用libxml2时xmlReadMemory未保留空节点原始格式,如何处理?

保留libxml2解析XML时空节点的原始形式

这个问题我之前也碰到过,确实可以通过调整xmlReadMemory()的解析选项来解决!

libxml2默认会把空元素(<tag></tag>)折叠成自闭合标签(<tag/>),但你可以通过启用XML_PARSE_NOEMPTY选项来改变这个行为。这个选项会告诉解析器保留空元素的原始开始+结束标签结构,而不进行折叠。

具体实现步骤

  1. 在调用xmlReadMemory()时,将最后一个options参数设置为XML_PARSE_NOEMPTY:
const char* xml_str = "<root><tag></tag><another>content</another></root>";
xmlDocPtr doc = xmlReadMemory(xml_str, strlen(xml_str), NULL, NULL, XML_PARSE_NOEMPTY);
  1. 验证效果:当你后续将解析后的xmlDocPtr输出为XML字符串时,空节点会保持<tag></tag>的原始形式,而不会被转换成<tag/>。

注意事项

  • 确保你的libxml2版本支持XML_PARSE_NOEMPTY选项,该选项从libxml2 2.7.0版本开始引入,主流版本都已支持。
  • 输出XML时,避免设置会强制折叠空元素的输出选项(比如XML_SAVE_NO_EMPTY,不过默认输出行为不会这么做),这样就能保证空节点的格式和解析时一致。

内容的提问来源于stack exchange,提问作者viv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:13:54