当前位置: 首页 > 面试题库 >

比较XML代码段?

公孙黎昕
2023-03-14
问题内容

基于另一个SO问题,如何检查两个格式正确的XML代码片段在语义上是否相等。我需要的只是“相等”与否,因为我正在将此用于单元测试。

在我想要的系统中,它们是相等的(请注意“开始”和“结束”的顺序):

<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<Stats start="1275955200" end="1276041599">
</Stats>

# Reordered start and end

<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<Stats end="1276041599" start="1275955200" >
</Stats>

我可以使用lmxl和其他工具,并且一个仅允许对属性进行重新排序的简单函数也可以正常工作!

基于IanB答案的工作片段:

from formencode.doctest_xml_compare import xml_compare
# have to strip these or fromstring carps
xml1 = """    <?xml version='1.0' encoding='utf-8' standalone='yes'?>
    <Stats start="1275955200" end="1276041599"></Stats>"""
xml2 = """     <?xml version='1.0' encoding='utf-8' standalone='yes'?>
    <Stats end="1276041599" start="1275955200"></Stats>"""
xml3 = """ <?xml version='1.0' encoding='utf-8' standalone='yes'?>
    <Stats start="1275955200"></Stats>"""

from lxml import etree
tree1 = etree.fromstring(xml1.strip())
tree2 = etree.fromstring(xml2.strip())
tree3 = etree.fromstring(xml3.strip())

import sys
reporter = lambda x: sys.stdout.write(x + "\n")

assert xml_compare(tree1,tree2,reporter)
assert xml_compare(tree1,tree3,reporter) is False

问题答案:

您可以使用formencode.doctest_xml_compare
-xml_compare函数比较两个ElementTree或lxml树。



 类似资料:
  • 问题内容: 我想知道哪个更快:XML和JSON?什么时候使用哪一个? 问题答案: 在回答何时使用哪一个之前,有一点背景知识: 编辑:我应该提到,这种比较实际上是从在具有JavaScript的浏览器中使用它们的角度来看的。这也不数据格式的方法 有 被使用,并且有很多很好的解析器,这将改变细节,使我在说什么不是很有效的。 JSON既更紧凑,又(在我看来)更具可读性-在传输中,仅因为传输的数据较少,它就

  • 问题内容: 我正在尝试使用C#代码比较两个Xml文件。我想忽略Xml语法差异(即前缀名称)。为此,我使用了Microsoft的XML Diff和Patch C#API。它适用于某些Xml,但我找不到配置它以与以下两个Xml一起使用的方法: XML A: XML B: 我的问题是: 我对这两个xml在语义上相等(或同构)是否正确? 可以配置Microsoft的XML Diff和Patch API来支

  • X2.1.0新增 sp_compare_password($password,$password_in_db) 功能: CMF密码比较方法,所有涉及用户密码比较的地方都用这个方法 参数: $password: 用户输入的密码 $password_in_db:数据库保存的经过加密后的密码串 返回: 类型boolean,密码相同,返回true 使用: $is_right = sp_compare_p

  • 问题内容: 将代码点与Java字符进行比较的“正确”方法是什么?例如: 我知道我可以做到: 但是这段代码看起来很脆弱。有没有比较正式的API方法来,或转换到一个比较? 问题答案: 有一点背景知识:Java在1995年出现时,该类型基于原始的“ Unicode 88 ”规范,该规范限于16位。一年后,当Unicode 2.0实施时,替代字符的概念超出了16位的限制。 Java内部以utf-16格式表

  • 我需要比较使用自定义差异侦听器忽略子节点序列和属性列表序列的2个XML: 我的代码适用于: 我找到了一个临时的解决方案(8小时内不能在我自己的问题上添加评论): 我之前用:ElementNameAndAttributeQualifier重写了ElementQualifier,如果我将其更改为RecursiveElementNameAndTextQualifier,我可以得到我想要的结果 还可以使用

  • cmf_compare_password($password, $passwordInDb) 功能 CMF密码比较方法,所有涉及密码比较的地方都用这个方法 参数 $password: string 要比较的密码 $passwordInDb: string 数据库保存的已经加密过的密码 返回 boolean 密码相同,返回true