如何在从xml文件

时间:2016-09-16 11:12:23

标签: c# xml linq

如何根据Rule1和Rule2的条件添加地址和HomeAddress的值。

Xml文件:

<?xml version="1.0" encoding="utf-8"?>
<File>
   <Data>
     <id></id>
     <name></name>
     <address></address>
     <HomeAddress></HomeAddress>
  </Data>
</File>

C#代码 [实际上xml是复杂的文件]

XDocument xmlDocFinal = XDocument.Load(@"E:/Test.xml"); string[]
myCondition = {"Rule1","Rule2"};
foreach(string rule in myCondition)
{
    var dataList = (from root in xmlDoc.Descendants("File")
                    from Data in root.Elements("Data")
                    select new
                    {
                        // For 
                        Name = Data.Element("name").Value,
                        ID = Data.Element("id").Value,
                        // if rule1 then add Address otherwise ingnor  it
                        Address =Data.Element("address").Value 
                        // if rule2 then add HomeAddress otherwise ingnor  it
                        HomeAddress = Data.Element("HomeAddress").Value 
                    })
        .ToList();
}

1 个答案:

答案 0 :(得分:1)

您可以使用conditional operator制作内联条件。像这样:

 Address = someCondition ? Data.Element("address").Value : string.Empty,
 HomeAddress = anotherCondition ? Data.Element("HomeAddress").Value : string.Empty

因此,如果someConditiontrue,则Address设置为该值,否则将其设置为默认值(此处我使用string.Empty,您可以使用你喜欢的任何东西)。设置HomeAddress也是如此。

修改:根据以下评论,如果您要创建两个单独的类型,那么您将需要两个单独的查询。像这样:

var dataListAddress = (from root in xmlDoc.Descendants("File")
                       from Data in root.Elements("Data")
                       where someCondition // first condition
                       select new
                       {
                           Name = Data.Element("name").Value,
                           ID = Data.Element("id").Value,
                           Address = Data.Element("address").Value 
                       }).ToList();
var dataListHomeAddress = (from root in xmlDoc.Descendants("File")
                           from Data in root.Elements("Data")
                           where anotherCondition // second condition
                           select new
                           {
                               Name = Data.Element("name").Value,
                               ID = Data.Element("id").Value,
                               HomeAddress = Data.Element("HomeAddress").Value 
                           }).ToList();

这是因为select子句中的匿名类型不同。如果它是objectdynamic之类的集合,您也许可以将它们合并到同一个集合中,但是当您需要使用该集合时,这可能是难以置信的下游。