2011-10-10 4 views
0

Я просто пытаюсь разобрать SOAP ответ и вытащить ResponseCode и UnconfirmedReasonCode Элементы из нижеперечисленных XML:Проблема выбора одного узла с помощью XPATH

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
    <CoverageResponse xmlns="http://www.iicmva.com/CoverageVerification/"> 
     <Detail> 
     <PolicyInformation> 
      <CoverageStatus> 
      <ResponseDetails> 
       <ResponseCode>CONFIRMED</ResponseCode> 
       <UnconfirmedReasonCode/> 
      </ResponseDetails> 
      </CoverageStatus> 
     </PolicyInformation> 
     </Detail> 
    </CoverageResponse> 
    </soap:Body> 
</soap:Envelope> 

Что я был пытаясь сделать это не работаешь:

Dim doc As New XmlDocument 
doc.LoadXml(result) 

Dim root = doc.DocumentElement.FirstChild.FirstChild 
Dim responseDetails = root.SelectSingleNode("descendant::Detail/PolicyInformation/CoverageStatus/ResponseDetails") 
Dim responseCode = responseDetails.ChildNodes(0).InnerText 
Dim unconfirmedReasonCode = responseDetails.ChildNodes(1).InnerText 

Console.WriteLine("Response Details:" & vbCrLf & vbCrLf & responseCode & " " & unconfirmedReasonCode) 
Console.ReadLine() 

ответ

2

Это наиболее часто задаваемые вопросы о выборе элементов документа XML с пространством имен по умолчанию - пожалуйста, море rch для XPath и пространства имен по умолчанию. Подсказка: прочитайте о классе XmlNamespaceManager.

Относительно простые и менее читаемые методы отбора:

Использование:

/*/*/*/*/*/*/*/*[local-name()='ResponseCode'] 

и использование:

/*/*/*/*/*/*/*/*[local-name()='UnconfirmedReasonCode'] 

XSLT - на основе проверка:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:copy-of select= 
    "/*/*/*/*/*/*/*/*[local-name()='ResponseCode']"/> 
    <xsl:copy-of select= 
    "/*/*/*/*/*/*/*/*[local-name()='UnconfirmedReasonCode']"/> 
</xsl:template> 
</xsl:stylesheet> 

, когда это преобразование применяется на прилагаемом документе XML:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
    <CoverageResponse xmlns="http://www.iicmva.com/CoverageVerification/"> 
     <Detail> 
     <PolicyInformation> 
      <CoverageStatus> 
      <ResponseDetails> 
       <ResponseCode>CONFIRMED</ResponseCode> 
       <UnconfirmedReasonCode/> 
      </ResponseDetails> 
      </CoverageStatus> 
     </PolicyInformation> 
     </Detail> 
    </CoverageResponse> 
    </soap:Body> 
</soap:Envelope> 

Эти два правильно выбранных узлов выводятся:

<ResponseCode xmlns="http://www.iicmva.com/CoverageVerification/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">CONFIRMED</ResponseCode> 
<UnconfirmedReasonCode xmlns="http://www.iicmva.com/CoverageVerification/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> 
+0

благодаря кучу! –

+0

@Scott: Добро пожаловать. –

Смежные вопросы