【发布时间】:2021-08-05 20:05:48
【问题描述】:
我需要根据预期的 XML 数据验证实际的 XML 数据。
示例:预期数据
<root>
<Orders>
<Order>
<DateTime>\d{8}_\d{4}</DateTime>
<OrderID>\d{4}</OrderID>
</Order>
<Order>
<DateTime>\d{8}_\d{4}</DateTime>
<OrderID>\d{4}</OrderID>
</Order>
</Orders>
<queryStatus>Success</queryStatus>
</root>
由于 DateTime 和 OrderIDs 会在每次执行时发生变化,因此我维护一个模式,而不是硬编码 DateTime 或 OrderIDs。以上只是一个示例 - 我们将需要比较和验证几个不同的 XML。
上述实际数据应与两个 XML 中的任何一个匹配
XML1:
<root>
<Orders>
<Order>
<DateTime>08052021_1250</DateTime>
<OrderID>1234</OrderID>
</Order>
<Order>
<DateTime>08052021_1251</DateTime>
<OrderID>4567</OrderID>
</Order>
</Orders>
<queryStatus>Success</queryStatus>
</root>
XML2:
<root>
<queryStatus>Success</queryStatus>
<Orders>
<Order>
<DateTime>08052021_1250</DateTime>
<OrderID>1234</OrderID>
</Order>
<Order>
<DateTime>08052021_1251</DateTime>
<OrderID>4567</OrderID>
</Order>
</Orders>
</root>
据我了解,xmlunit 会报告 DateTime 和 OrderID 不匹配。我愿意接受基于 Java 的解决方案或基于 Bash 脚本 (xmllint) 的解决方案。您能否提供有关如何解决此问题的任何指示。
【问题讨论】:
-
\d{8}_\d{4}用于验证模式而非实际值的正则表达式。您是否需要验证值是否相等?就 XML 内容而言,XML1 和 XML2 看起来相同。 -
XML1 和 XML2 是相同的,只是 XML 元素的顺序不同。是的 \d{8}_\d{4} 是一个正则表达式。由于我需要针对“预期数据”验证每次执行时具有不同日期时间/订单号的输出,因此我无法将实际值放入“预期数据”中。因此我需要输入一个正则表达式(或其他东西),如果实际数据与预期的数据格式相匹配,我们需要进行匹配。
标签: java xml bash pattern-matching