Помощь с выбором единого кода, XML и C#

#c# #asp.net #xml

#c# #asp.net #xml

Вопрос:

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

 <?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>
<ABRSearchByABNResponse xmlns="http://abr.business.gov.au/ABRXMLSearch/">
<ABRPayloadSearchResults>
<request>
    <identifierSearchRequest>
        <identifierType>ABN</identifierType>
        <identifierValue>79 142 357 604</identifierValue>
    </identifierSearchRequest>
</request>
<response>
    <dateRegisterLastUpdated>2011-04-26</dateRegisterLastUpdated>
    <dateTimeRetrieved>2011-04-26T14:10:17.8169921 10:00</dateTimeRetrieved>
    <businessEntity>
        <recordLastUpdatedDate>2010-03-05</recordLastUpdatedDate>
        <ABN>
            <identifierValue>79142357604</identifierValue>
            <isCurrentIndicator>Y</isCurrentIndicator>
            <replacedIdentifierValue xsi:nil="true" />
            <replacedFrom>0001-01-01</replacedFrom>
        </ABN>
        <entityStatus>
            <effectiveTo>0001-01-01</effectiveTo>
        </entityStatus>         
        <entityType>
            <entityTypeCode>PUB</entityTypeCode>
        </entityType>
        <mainBusinessPhysicalAddress>
            <stateCode>NSW</stateCode>
            <postcode>2000</postcode>
        </mainBusinessPhysicalAddress>
        </businessEntity>
</response>
</ABRPayloadSearchResults>
</ABRSearchByABNResponse>
</soap:Body>
</soap:Envelope>
  

Что я пытаюсь получить, так это entityTypeCode, но у меня ничего не получается. Я пытался с

 XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(searchPayload);


XmlNamespaceManager nsmgr = new XmlNamespaceManager(xDoc.NameTable);
nsmgr.AddNamespace("c", "http://abr.business.gov.au/ABRXMLSearch/");

XmlNode entityTypeCode = xDoc.SelectSingleNode("//entityTypeCode", nsmgr);
  

и различные выражения xpath, но это xmlnode entityTypeCode всегда имеет значение null.

Предложения?

Заранее спасибо.

Ответ №1:

используйте XmlNode entityTypeCode = xDoc.SelectSingleNode("//c:entityTypeCode", nsmgr); так, как вы добавили пространство имен элемента в качестве префикса c в диспетчере пространств имен.