?Как получить теги по части имени элемента - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть следующий XML-ответ:

<S:Envelope 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns0:RespOpReportGen
            xmlns:ns7="http://my.service.url/Schemas/folder1"
            xmlns:ns4="http://my.service.url/framework/folder2"
            xmlns:ns13="http://my.service.url/framework/folder3"
            xmlns:ns0="http://my.service.url/framework/folder4">
         <ns0:contextResponse>
            <ns4:trnResult>
               <ns13:trnStatus/>
               <ns13:OKNOResponse>B</ns13:OKNOResponse>
               <ns13:ApprovalNr>0</ns13:ApprovalNr>
               <ns13:trnID>213454567</ns13:trnID>
               <ns13:trnDate>2019-03-13T13:02:10.76</ns13:trnDate>
            </ns4:trnResult>
         </ns0:contextResponse>
         <ns0:FileResponse>
            <ns7:contentFile>JVBERi0</ns7:contentFile>
            <ns7:mimeType>application/pdf</ns7:mimeType>
         </ns0:FileResponse>
      </ns0:RespOpReportGen>
   </S:Body>
</S:Envelope>

Я использую следующий код для получения значения в теге ns7: contentFile

Dim soapResultXml As XmlDocument = New XmlDocument()
soapResultXml.LoadXml(soapResult)

Dim resultado As XmlNodeList = soapResultXml.GetElementsByTagName("contentFile")

... но я не получил результатов.

Есть ли способ получить теги по части имени?или ... как я могу получить значение "ns7:", чтобы объединить его с "contentFile"?

Заранее спасибо и наилучшими пожеланиями.

РЕДАКТИРОВАТЬ

Dim soapResultXml As XmlDocument = New XmlDocument()
soapResultXml.LoadXml(soapResult)
Dim resultado As XmlNodeList = soapResultXml.SelectNodes("//*[contains(name(),'contentFile')]")

Это тоже работает.

1 Ответ

0 голосов
/ 03 апреля 2019

Вам необходимо добавить и настроить XmlNamespaceManager.Как то так.

Dim soapResultXml As XmlDocument = New XmlDocument()
soapResultXml.LoadXml(soapResult)

Dim xnm as New XmlNamespaceManager(soapResultXml.NameTable)
xnm.AddNamespace("ns7", "http://my.service.url/folder1")

''//add more namespaces
''// xnm.AddNamespace("ns8", "http://my.service.url/folder2")
''//prefix doesn't matter. URI matters.

Dim resultado As XmlNodeList = soapResultXml.SelectNodes("contentFile", xnm)
...