Я получаю сообщение от сервера SQL в адаптере WCF-SQL.В этом сообщении есть узел XML, который содержит полностью отформатированный документ XML в виде строки.Что мне нужно, так это извлечь только этот документ, игнорируя остальную часть тела, чтобы он мог обрабатываться далее конвейером.
Я пробовал несколько выражений xPath в выражении "путь к телу""поле ввода в настройках конфигурации на адаптере, но ни один из них, кажется, не работает так, как я ожидаю.
Некоторые строки xPath, которые я пробовал:
/Polling/PolledData[1]/*[namespace-uri()='http://schemas.datacontract.org/2004/07/System.Data' and local-name()='DataSet'][1]/*[namespace-uri()='urn:schemas-microsoft-com:xml-diffgram-v1' and local-name()='diffgram'][1]/*[namespace-uri()='' and local-name()='NewDataSet'][1]/*[namespace-uri()='' and local-name()='NewTable'][1]/*[namespace-uri()='' and local-name()='msgbody'][1]
/*[local-name()='Polling']/*[local-name()='PolledData']/*[local-name()='DataSet']/*[local-name()='diffgram']/*[local-name()='NewDataSet']/*[local-name()='NewTable']/*[local-name()='msgbody']
/Polling/PolledData/DataSet/diffgr:diffgram/NewDataSet/NewTable/msgbody
//*[msgbody]/text()
Тело XML-документа, который я получаю, структурировано примерно так, с узлом XML, из которого я пытаюсь извлечь контент в конце:
<Polling xmlns="http://schemas.microsoft.com/Sql/2008/05/Polling/">
<PolledData>
<DataSet xmlns="http://schemas.datacontract.org/2004/07/System.Data">
<xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element msdata:IsDataSet="true" name="NewDataSet">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="conversationID" type="xs:string"/>
<xs:element minOccurs="0" name="hostUTC" type="xs:dateTime"/>
<xs:element minOccurs="0" name="msgType" type="xs:string"/>
<xs:element minOccurs="0" name="acknowledgment" type="xs:string"/>
<xs:element minOccurs="0" name="sendLog" type="xs:string"/>
<xs:element minOccurs="0" name="msgFormat" type="xs:string"/>
<xs:element minOccurs="0" name="msgbody" type="xs:string"/>
<xs:element minOccurs="0" name="fromID" type="xs:string"/>
<xs:element minOccurs="0" name="toID" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<NewTable>
<conversationID>b4327577-14d1-478d-9e22-027683c0c5f9</conversationID>
<hostUTC>2018-11-19T13:17:07.03Z</hostUTC>
<msgType>INVOIC</msgType>
<msgFormat>oioUBL</msgFormat>
<msgbody><Invoice xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Я не уверен, как правильно написать правильный xPath для этого узла.Чтение документации по MS docs , кажется, указывает на то, что мне нужно использовать синтаксис локального имени.Я думаю, что моя проблема заключается в использовании пространств имен в полученном XML, но я не знаю, как включить их в xPath.