正在分析从WebRequest返回的XML字符串



我有一个HTTPWebRequest返回的xml字符串,我需要对其进行解析以获得正确的邮件地址。标记包含一个子标记,该子标记将是"主要"或"备用"。如果标记等于Alternate,我将使用该CustAddr的地址值,但如果没有Alternate则我将使用primary作为默认值。在C#中,如何使用System.Xml.Linq库来完成此操作?

<Customer>
<CustInfo>
<CustAddr>
<FullName>MY PRIMARY NAME</FullName>
<Addr1>PRIMARY ADDRESS1</Addr1>
<Addr2>PRIMARY ADDRESS2</Addr2>
<Addr3>PRIMARY ADDRESS3</Addr3>
<Addr4></Addr4>
<Addr5></Addr5>
<AddrCode>PRIMARY</AddrCode>
</CustAddr>
<CustAddr>
<FullName>MY ALTERNATE ADDRESS LINE 1</FullName>
<Addr1>TEST ALT ADDRESS LINE1</Addr1>
<Addr2>TEST ALT ADDRESS LINE2</Addr2>
<Addr3>TEST ALT ADDRESS LINE3</Addr3>
<Addr4></Addr4>
<Addr5></Addr5>
<AddrCode>ALTERNATE</AddrCode>
</CustAddr>
</CustInfo>
</Customer>

尝试以下xml linq。我用Regex获取地址。需要避免将AddrCode作为地址的一部分。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Text.RegularExpressions;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:temptest.xml";
static void Main(string[] args)
{
string xml = File.ReadAllText(FILENAME);
//use parse to take string returned from request
XDocument doc = XDocument.Parse(xml);
KeyValuePair<string, List<string>> results = doc.Descendants("CustAddr").Where(x => (string)x.Element("AddrCode") == "PRIMARY")
.Select(x => new KeyValuePair<string, List<string>>((string)x.Element("FullName"), x.Elements().Where(y => Regex.IsMatch(y.Name.LocalName, @"Addrd")).Select(y => (string)y).ToList())).FirstOrDefault(); 
}
}
}

最新更新