我有以下XML:
<?xml version="1.0" encoding="UTF-8" ?>
<Ticket>
<PlannedTraffic>
<Action>
<Value>Allow</Value>
</Action>
<Destination>
<Value>*</Value>
</Destination>
<ServiceApplication>
<Value>tcp/80</Value>
</ServiceApplication>
<Source>
<Value>10.130.5.5</Value>
</Source>
<ABF_flow_comment>Subscribe value</ABF_flow_comment>
</PlannedTraffic>
<PlannedTraffic>
<Action>
<Value>Allow</Value>
</Action>
<Destination>
<Value>*</Value>
</Destination>
<ServiceApplication>
<Value>tcp/22</Value>
</ServiceApplication>
<ServiceApplication>
<Value>tcp/21</Value>
</ServiceApplication>
<Source>
<Value>10.130.5.17</Value>
</Source>
<ABF_flow_comment>Comment with the word subscribe</ABF_flow_comment>
</PlannedTraffic>
</Ticket>
使用XQL我需要检查是否所有包含单词&#34; Subscribe&#34;。如果所有这些都包含单词subscribe,则返回true或所有节点。如果其中一个或多个不包含单词subscribe,我需要它返回false或什么都不是。 哪个XQL可用于此?
我尝试过以下操作,但它只返回值为&#34;订阅&#34;并且我无法检测是否只有一个节点不包含它。我想我需要一些带count()然后与节点数量进行比较,但我不确定如何进行XQL查询
Ticket/PlannedTraffic[ABF_flow_comment =~ '/[sS]ubscribe/']
答案 0 :(得分:1)
为什么不
not(Ticket/PlannedTraffic[not(contains(ABF_flow_comment, 'ubscribe'))])
只有在true
没有PlannedTraffic
ABF_flow_comment
答案 1 :(得分:0)
不完全熟悉语法,我可以告诉你我将如何完成它。我将为所有节点创建一个XPath,无论订阅状态如何:
订票/ PlannedTraffic
然后我会比较XPath返回项的计数与上面使用XPath返回的总项数。如果它们是相同的,那么所有都是订阅的。在Java中使用Selenium我会使用:
int totNodes = driver.FindElements(By.XPath("//Ticket/PlannedTraffic").size();
int subNodes = driver.FindElements(By.XPath("//Ticket/PlannedTraffic[contains(@ABF_flow_comment,"ubscribed")]").size();
Boolean isAllSubscribed = (totNodes == subNodes);
希望这有助于至少为您指明方向。