我有一种情况,XML数据由两种不同的机制处理.在一个地方,它使用Python的xml.dom.minidom库进行处理.另一方面,通过XmlTextWriter在.NET中执行类似的处理.
在Python代码生成的输出中,空元素写为<ElementName />(在元素关闭之前没有空格).在.NET代码中,正在插入一个空格(导致<ElementName />).这与XML的有效性或含义没有任何区别,但是当比较两个输出时,它确实导致输出被检测为不同.
有没有办法告诉XmlTextWriter不要包含额外的空间?如果失败了,有没有办法在Python生成的输出中包含额外的空间(没有搞乱库源,哪些可能是我认为不可取的东西;-))?
更新:也许我应该解释我正在尝试做什么,而不是仅仅描述问题.我可能会比我应该做的更复杂/痛苦.
我真正需要的是一些机制来确定XML所代表的结构尚未被修改.我最初是扁平化XML(当在.NET世界中完成所有事情时消除了空白问题),然后计算数据的适当盐渍哈希值.有没有更好的机制我可以/应该使用?
可能不是你想要的答案:不要将XML输出比作纯文本.我们这样做是为了我们的单元测试(两个通过xml消息进行通信的应用程序),它很脆弱,易于破解,烦人且需要大量维护.你应该解析xml输出并比较结构 - 编写这样的工具需要做更多的工作(也许有一个alrady)但是当输出在任何库的下一个版本中再次稍微改变时它仍然可以工作.
编辑:好的,既然你已经解释了你的问题了,那么让我看看我是否理解它:你有一些数据可以为你创建XML输出.有时通过.NET,有时通过Python.假设您通过.NET创建输出,然后计算其上的哈希并存储它.稍后您通过Python生成输出,该输出应该具有相同的内容,您还可以为它计算哈希值.由于白色空间问题,现在两个哈希值不相等.
如果是这种情况,您可以遍历XML文档并根据看到的节点及其属性和值计算哈希值.一种更简单的方法是从输出中去除所有不相关的空格(无论输出来自何处),然后进行哈希计算.你可以用Python做到这一点 ;)