我是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();
现在我还在寻找下一步该做什么。如果我在正确的方向或完全错误的任何想法?
答案 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.
}