ASP.Net - 解析XML

3

我有一个XMLDocument对象,其InnerXml设置为我从Web服务获取的响应。样本响应如下:

<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个回答

4
你可以尝试这种方法...
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;
                    }

                }
            }

谢谢。我能选择保留哪些元素吗?例如,如果我不关心<Urbanization>,只想在一个"AddressInfo"对象中存储Address2、City和State。 - NoBullMan
我使用以下代码获取所需字段:var AddressInfoList = doc.Descendants("GetAddressResponse").Descendants("DefaultAddress").Select(Address => new{ Address = Address.Element("Address2").Value, City = Address.Element("City").Value, State = Address.Element("State").Value, Zip5 = Address.Element("Zip5").Value, Zip4 = Address.Element("Zip4").Value, DPC = Address.Element("DeliveryPoint").Value, }).ToList(); foreach (var AddressInfo in AddressInfoList) { - NoBullMan
你可以使用相同的方法SelectSingleNode,请查看另一个示例..在答案中。 - Thit Lwin Oo

0

// 用于单节点选择...

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

                }
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接