【发布时间】:2018-04-06 10:40:49
【问题描述】:
我想使用 Schematron 比较两个 XML 文件。我有一个如下所示的模板:
<action name="thirdAction" id="3">
<return-values>
<return-value name="communication-profile-id" />
<return-value name="messaging-profile-id" />
</return-values>
当创建一个动作实例时,它看起来像这样:
<instanceOfAction name="thirdAction" id="3">
<results>
<result name="communication-profile-id" />
<result name="messaging-profile-id" />
</results>
</instanceOfAction>
我想根据 id 将 instanceOfAction 映射到给定的操作,然后检查子元素的名称是否对应。在我的层次结构中,我有很多动作使这变得更加困难。有人有实施此的建议吗?通过执行以下操作,我成功检查了 instanceOfAction 中的结果是否在某些定义的操作中,但不是专门在具有相同 ID 的操作中:
<sch:rule context="//ts:instanceOfAction/ts:results/ts:result">
<sch:assert test="$testspecification//(ts:actions/ts:action/ts:return-values/ts:return-value)[@name= current()/@key]">
The keys from the results do not match with the names from the return-values.
</sch:assert>
</sch:rule>
其中变量 $testspecification 是根层次结构的路径,其中包含所有 XML 文件。
任何帮助或想法将不胜感激。 :)
【问题讨论】:
标签: xml xpath schematron