Мне нужно отфильтровать ответ веб-службы SOAP. Поскольку SOAP основан на XML, я думаю об использовании libxml2, но я не могу понять, как написать выражение XPath для достижения желаемого результата.Фильтрация XML с помощью XPath на основе содержимого дочерних элементов
В конце сообщения вы найдете пример ответа, в котором отправляются два сообщения NotficationMessages, есть тема tns1:RuleEngine/LineDetector/Crossed
, другая - тема tns1:RuleEngine/CellMotionDetector/Motion
.
Я пытаюсь написать следующие XPath выражения:
- матч любой NotficationMessage чья тема
tns1:RuleEngine/LineDetector/Crossed
- матч любой NotficationMessage чья тема
tns1:RuleEngine//.
- матч любой NotficationMessage, тема которого есть все, но
tns1:RuleEngine//.
Все примеры, которые я нашел, соответствуют атрибутам, а не содержимому ch элементы ild.
Так что я спрашиваю.
- такие виды соответствия можно использовать с libxml2 или с XPath в целом?
- Не могли бы вы дать мне подсказку о написании выражений XPath?
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wstop="http://docs.oasis-open.org/wsn/t-1"
xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2"
xmlns:tet="http://www.onvif.org/ver10/events/wsdl"
xmlns:tns1="http://www.onvif.org/ver10/topics"
xmlns:tt="http://www.onvif.org/ver10/schema">
<SOAP-ENV:Header>
<wsa:Action> http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/PullMessagesResponse
</wsa:Action>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<tet:PullMessagesResponse>
<tet:CurrentTime>
2008-10-10T12:24:58
</tet:CurrentTime>
<tet:TerminationTime>
2008-10-10T12:25:58
</tet:TerminationTime>
<wsnt:NotificationMessage>
<wsnt:Topic Dialect="http://www.onvif.org/ver10/tev/topicExpression/ConcreteSet">
tns1:RuleEngine/LineDetector/Crossed
</wsnt:Topic>
<wsnt:Message>
<tt:Message UtcTime="2008-10-10T12:24:57.321Z">
<tt:Source>
<tt:SimpleItem Name="VideoSourceConfigurationToken"
Value="1"/>
<tt:SimpleItem Name="VideoAnalyticsConfigurationToken"
Value="2"/>
<tt:SimpleItem Value="MyImportantFence1" Name="Rule"/>
</tt:Source>
<tt:Data>
<tt:SimpleItem Name="ObjectId" Value="15" />
</tt:Data>
</tt:Message>
</wsnt:Message>
</wsnt:NotificationMessage>
<wsnt:NotficationMessage>
<wsnt:Topic Dialect="http://www.onvif.org/ver10/tev/topicExpression/ConcreteSet">
tns1:RuleEngine/CellMotionDetector/Motion
</wsnt:Topic>
<wsnt:Message>
<tt:Message UtcTime= "2010-10-20T12:24:57.628">
<tt:Source>
<tt:SimpleItem Name="VideoSourceConfigurationToken" Value="1"/>
<tt:SimpleItem Name="VideoAnalyticsConfigurationToken" Value="1"/>
<tt:SimpleItem Name="Rule" Value="MotionInDefinedCells"/>
</tt:Source>
<tt:Data>
<tt:SimpleItem Name="IsMotion" Value="true"/>
</tt:Data>
</tt:Message>
</wsnt:Message>
</wsnt:NotficationMessage>
</tet:PullMessagesResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>