2016-05-10 42 views
0

我有一个xml文件,其中的成员条目将可用。我有一个像下面的XML,如何在XmlNodeList中使用StartsWith foreach

XML格式

<Users> 
    <User> 
    <Id>1</Id> 
    <Email1>[email protected]</Email1> 
    <EmailType1>W</EmailType1> 
    <Email2>[email protected]</Email2> 
    <EmailType2>H</EmailType2>  // Email and EmailType can be upto `n` times. 
    </User> 
    <User> 
    <Id>2</Id> 
    <Email1>[email protected]</Email1> 
    <EmailType1>H</EmailType1> 
    <Email2>[email protected]</Email2> 
    <EmailType2>O</EmailType2> 
    </User> 
</Users> 

我需要从上面的例子XML的项目清单。我正在尝试使用XmlNodeList循环以形成列表。我在这里解压缩电子邮件列表。有

代码

public List<ImportProp> ReturnItmsList(XmlDocument xmlDoc) 
{ 
    List<ImportProp> ListImport = new List<ImportProp>(); 
    XmlNodeList parentNode = xmlDoc.SelectNodes("Users/User"); 
    int cnt = 1; 
    foreach (XmlNode childrenNode in parentNode) 
    { 
     ImportProp ppd = new ImportProp(); 
     ppd.BorrowId = (childrenNode["Id"] == null) ? "" : childrenNode["BorrowId"].InnerText; 
    } 
} 

我感谢所有帮助。

回答

0

这是一种可能的方式:

var result = childrenNode.SelectNodes("*") 
         .Cast<XmlNode>() 
         .Where(o => o.LocalName.StartsWith("EmailType")) 
         .Select(o => new 
         { 
         email = o.PreviousSibling.InnerText, 
         emailType = o.InnerText 
         }) 
         .ToList(); 

您还可以在使用的XPath starts-with()

var result = childrenNode.SelectNodes("*[starts-with(local-name(), 'EmailType')]") 
         .Cast<XmlNode>() 
         .Select(o => new 
         { 
         email = o.PreviousSibling.InnerText, 
         emailType = o.InnerText 
         }) 
         .ToList();