我需要访问加载的XML DOM的内部二进制表示… 有一些转储函数 ,但我没有看到类似“二进制缓冲区”(只有“XML缓冲区”)。
我的最后一个目标是在一些黑盒程序之前和之后逐字节地比较同一文档 ,直接用它们的二进制(当前和缓存)表示,而不转换(到XML文本表示)……所以,这个问题,
LibXML2中有一个二进制表示(内存中结构),用于将转储与当前表示进行比较?
我只需要检查当前和转储的DOM是否相同。
细节
这不是比较两个不同DOM对象的问题 ,而是更容易的事情,因为不更改ID等不需要规范表示(!),只需要访问内部表示,因为它比转换为文本快得多。
在“之前和之后”之间有一个黑盒程序 ,例如。 影响(或不影响)某些节点或属性的XSLT Identity转换 。
替代解决方案
笔记
相关问题
使用已解答解决方案的读者警告
问题是“在之前与后箱操作之后进行比较”,但这里有两种后箱 :
我将在“众所周知的”黑盒子的背景下使用解决方案 。 因此,我在上面“详细信息”部分的评论是有效的。
在“完全免费”后台的上下文中,您不能使用“二进制转储的比较”,因为只有规范表示(C14N)才有效进行比较。 为了通过C14N标准进行比较,只有“替代解决方案”(上面评论)是可能的。 对于alternative-1,除了其他之外,您必须在比较一组属性节点之前进行排序。 对于alternative-2( 也在这里讨论 ),生成C14N转储。
PS:当然,使用C14N标准是主观的,取决于应用 :if,p。 例如,对于您的应用,“更改属性顺序”是一个有效/重要的更改,检测它的比较是有效的(!)。
以下是相关的libxml2方法:
有一个base64编码方法:
function:xmlTextWriterWriteBase64 int xmlTextWriterWriteBase64(xmlTextWriterPtr writer, const char *数据, int start, int len) 编写base64编码的xml文本。 writer:xmlTextWriterPtr 数据:二进制数据 start:要编码的第一个字节的数据内的位置 len:要编码的字节数 返回:写入的字节(由于缓冲可能为0)或出错时为-1
和BinHex编码方法:
function:xmlTextWriterWriteBinHex int xmlTextWriterWriteBinHex(xmlTextWriterPtr writer, const char *数据, int start, int len) 编写BinHex编码的xml文本。 writer:xmlTextWriterPtr 数据:二进制数据 start:要编码的第一个字节的数据内的位置 len:要编码的字节数 返回:写入的字节(由于缓冲可能为0)或出错时为-1
参考
以上就是c/c++开发分享LibXML2中有“二进制转储”或“获取二进制表示”function?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/562474.html