如何获取满足属性的目录中的所有xml文件

时间:2015-04-08 10:08:53

标签: c# xml linq

我是C#的新手,我目前正在开展一个侧面项目,以提高我的技能,并且我正在处理一堆XML数据。我想知道是否有办法在某个目录下找到满足某些属性的XML文件,例如所有以I开头的城市,或者从1000000000 - 1111111111开始的所有电话号码。我一直在寻找Linq to XML,因为这似乎是很多人在使用C#进行XML解析时所使用的,但我不知道知道该用什么。任何帮助将不胜感激。

我最初的做法是: 打开目录中的每个XML文件并查找所述属性,如果它们匹配移动或将XML文件的副本复制到另一个目录中,则循环直到我检查目录中的所有文件。希望有一个更智能,更快速的方法来解决这个问题?也许列出满足该属性的所有XML文件名列表?

谢谢!

编辑:XML结构示例:

`<DallasMavericks>
  <Players>
    <Name>Dirk Nowitzki</Name>
    <Age>36</Age>
    <Height>7 foot</Height>
    <Weight>245 lbs</Weight>
    <YearsPlayed>16</YearsPlayed>
  </Players>
</DallasMavericks>`

和我可以拥有的其他XML文件

`<SanAntonioSpurs>
  <Players>
    <Name>Tim Duncan</Name>
    <Age>38</Age>
    <Height>6 foot 11 inches</Height>
    <Weight>256 lbs</Weight>
    <YearsPlayed>17</YearsPlayed>
  </Players>
</SanAntonioSpurs>`

并且想法是搜索具有玩过年数的玩家的XML文件&gt; 15岁,或者> 30岁的球员。

编辑2:我几乎没有开始,所以这就是我在代码方面的目标:

// check all xml files in the directory
foreach (string xmlFile in Directory.EnumerateFiles(directory, "#.xml"))
{
    // read all xml files
    string contents = File.ReadAllText(xmlFile);
}

// attribute we are using
int age = 30;

// check to see if Age attribute is greater than age 
var query = from age in xmlFile.Root.Elements("Age")
                 where (int)age.Attribute("Age") > age
                 select (int)age.Attribute("Age");

var files = query.ToList();

现在我还在寻找下一步该做什么。如果我在正确的方向或完全错误的任何想法?

1 个答案:

答案 0 :(得分:1)

试试这个

var files = Directory.GetFiles(<sourcedirectory>, "*.xml", SearchOption.AllDirectories);
foreach (var file in files)
{
    var doc = XDocument.Load(file);
    var result = doc.Descendants("YearsPlayed").Any(yearsplayed => Convert.ToInt32(yearsplayed.Value) > 15);
    // Copy file.
}