C 基于子元素的内容使用XPath过滤XML

C 基于子元素的内容使用XPath过滤XML,c,xml,xpath,libxml2,onvif,C,Xml,Xpath,Libxml2,Onvif,我需要过滤soapweb服务的响应。由于SOAP是基于XML的,所以我正在考虑使用libxml2,但我无法理解如何编写XPath表达式来实现所需的结果 在消息末尾,您将看到一个响应示例,其中发送了两条NotificationMessage,一条主题为tns1:RuleEngine/LineDetector/Crossed,另一条主题为tns1:RuleEngine/CellMotionDetector/Motion 我正在尝试编写以下XPath表达式: 匹配主题为tns1的任何Notificat

我需要过滤soapweb服务的响应。由于SOAP是基于XML的,所以我正在考虑使用libxml2,但我无法理解如何编写XPath表达式来实现所需的结果

在消息末尾,您将看到一个响应示例,其中发送了两条NotificationMessage,一条主题为tns1:RuleEngine/LineDetector/Crossed,另一条主题为tns1:RuleEngine/CellMotionDetector/Motion

我正在尝试编写以下XPath表达式:

匹配主题为tns1的任何NotificationMessage:RuleEngine/LineDetector/Crossed 匹配主题为tns1:RuleEngine//的任何NotificationMessage。 匹配主题为除tns1:RuleEngine//以外的所有内容的任何NotificationMessage。 我发现的所有示例都与属性匹配,而不是子元素的内容

所以我在问

这种匹配在libxml2或XPath中是可行的吗? 您能给我一个关于编写XPath表达式的提示吗? http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/PullMessagesResponse 2008-10-10T12:24:58 2008-10-10T12:25:58 tns1:规则引擎/线路检测器/交叉 tns1:RuleEngine/CellMotionDetector/Motion
您只需要使用和的基本XPath表达式:

匹配主题为tns1的任何NotificationMessage:RuleEngine/LineDetector/Crossed

匹配主题为tns1:RuleEngine//的任何NotificationMessage

匹配主题为除tns1:RuleEngine//以外的所有内容的任何NotificationMessage

//wsnt:NotificationMessage[wsnt:Topic = 'tns1:RuleEngine/LineDetector/Crossed']
//wsnt:NotificationMessage[wsnt:Topic = 'tns1:RuleEngine//.']
//wsnt:NotificationMessage[wsnt:Topic != 'tns1:RuleEngine//.']