ASP.Net - парсинг XML - PullRequest
       10

ASP.Net - парсинг XML

2 голосов
/ 06 марта 2012

У меня есть объект XMLDocument, в котором InnerXml устанавливает ответ, полученный от веб-службы. Пример ответа выглядит так:

<GetAddressResponse>
    <AddressStatus>EXACT MATCH</AddressStatus>
    <DefaultAddress>
        <FirmName></FirmName>
        <Address1></Address1>
        <Address2>PO BOX 123</Address2>
        <City>DAYTON</City>
        <State>OH</State>
        <Urbanization></Urbanization>
        <Zip5>45475</Zip5>
        <Zip4>1952</Zip4>
        <CarrierRoute>B017</CarrierRoute>
        <CountyName>MONTGOMERY</CountyName>
        <DeliveryPoint>52</DeliveryPoint>
    </DefaultAddress>
    <AddressRecCount>0</AddressRecCount>
</GetAddressResponse>

Мне нужно иметь возможность сначала получить и проверить значение AddressStatus и, основываясь на результате, получить все в DefaultAddress. Я использую .Net3.5, поэтому я могу использовать Linq в случае необходимости. Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 06 марта 2012

Вы можете попробовать этот способ ..

string xml = @"<GetAddressResponse>
                            <AddressStatus>EXACT MATCH</AddressStatus>
                            <DefaultAddress>
                                <FirmName></FirmName>
                                <Address1></Address1>
                                <Address2>PO BOX 123</Address2>
                                <City>DAYTON</City>
                                <State>OH</State>
                                <Urbanization></Urbanization>
                                <Zip5>45475</Zip5>
                                <Zip4>1952</Zip4>
                                <CarrierRoute>B017</CarrierRoute>
                                <CountyName>MONTGOMERY</CountyName>
                                <DeliveryPoint>52</DeliveryPoint>
                            </DefaultAddress>
                            <AddressRecCount>0</AddressRecCount>
                        </GetAddressResponse>
                        ";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);

            XmlNode node = doc.SelectSingleNode("GetAddressResponse/AddressStatus");

            if (node != null)
            {
                string addStatus = node.InnerText.Trim();

                if (addStatus.ToUpper() == "EXACT MATCH")
                {
                    XmlNode addNode = doc.SelectSingleNode("GetAddressResponse/DefaultAddress");

                    foreach (XmlElement ele in addNode.ChildNodes)
                    {
                        //get each child element value
                        string val = ele.InnerText;
                    }

                }
            }
0 голосов
/ 06 марта 2012

// для выбора одного узла ..

if (node != null)
            {
                string addStatus = node.InnerText.Trim();

                if (addStatus.ToUpper() == "EXACT MATCH")
                {
                    XmlNode addNode = doc.SelectSingleNode("GetAddressResponse/DefaultAddress");

                    //only Zip5 is selected if exists
                    XmlNode childNode = addNode.SelectSingleNode("Zip5");

                    if (childNode != null) { string zip = childNode.InnerText; }

                    //select city
                    childNode = addNode.SelectSingleNode("City");
                    if (childNode != null) { string city = childNode.InnerText; }

                    //etc

                }
            }
...