我在xpath中遇到问题 - 我需要检查两个属性值,如果条件满足需要做硬代码我自己的值。下面是我的xml。
我需要像子根内部一样检查条件 - 如果ItemType = Table1和ItemCondition = Chair1那么我必须给出一个硬编码值'Proceed'(这个硬编码值我将映射到datamapper的目标端)。
<Root>
<SubRoot>
<ItemType>Table1</ItemType>
<ItemCondition>Chair1</ItemCondition>
<ItemValue>
.......
</ItemValue>
</SubRoot>
<SubRoot>
<ItemType>Table2</ItemType>
<ItemCondition>chair2</ItemCondition>
<ItemValue>
.......
</ItemValue>
</SubRoot>
....Will have multiple subroot
</Root>
我试图定义如下规则,但是它会抛出错误
Type: String
Context:/Root
Xpath: substring("Proceed", 1 div boolean(/SubRoot[ItemType="Table1" and ItemCondition="Chair1"]))
但它会像
那样抛出错误 net.sf.saxon.trans.XPathException: Arithmetic operator is not defined for arguments of types (xs:integer, xs:boolean)
还有其他快捷方式可以执行此操作。请你帮助我,我付出了很多努力。无法解决它。提前谢谢。
答案 0 :(得分:1)
我不确定你在哪里应用这个,但你正在寻找的XPath表达式是:
fn:contains(/Root/SubRoot[2]/ItemCondition, "chair") and fn:contains(/Root/SubRoot[2]/ItemType, "Table")
所以这是一个例子,根据需要返回“继续”或“停止”:
if (fn:contains(/Root/SubRoot[1]/ItemCondition, "Chair") and fn:contains(/Root/SubRoot[2]/ItemType, "Table")) then 'Proceed' else 'Stop'
答案 1 :(得分:0)
为了实现上述条件,我最初厌倦了在xpath中做,给了我很多错误。我已经通过数据映射器的脚本部分中的简单if else条件实现了
if ( (input.ItemType == 'Table') and (input.ItemCondition == 'chair')) {
output.Item = 'Proceed'}
else {
output.Item = 'Stop '};
如果您是第一次尝试实施逻辑。它可能对你有帮助。