C# 如何从目录中的所有xml文件中获取特定属性?

C# 如何从目录中的所有xml文件中获取特定属性?,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我有一个装满xml文件的文件夹。在这些文件中,许多文件共享一个公共属性(名称),但有一个不同的辅助属性。我想通过读取这些xml文件得到一个唯一条目的列表。下面是各种xml文件将包含的内容的示例 文件1 <?xml version="1.0" encoding="UTF-8"?> <results date="2013-12-29"> <A uniqueId="1234" Name="My-Machine"/> <error number="555">

我有一个装满xml文件的文件夹。在这些文件中,许多文件共享一个公共属性(名称),但有一个不同的辅助属性。我想通过读取这些xml文件得到一个唯一条目的列表。下面是各种xml文件将包含的内容的示例

文件1

<?xml version="1.0" encoding="UTF-8"?>
<results date="2013-12-29">
<A uniqueId="1234" Name="My-Machine"/>
<error number="555">
<description><![CDATA[House on Fire]]></description>
</error>
</results>

似乎LINQ可能是处理此问题的最佳方法,因为文件的内容非常小。

以下是一种从一个文件读取
说明
元素内容的方法:

var xDoc = XDocument.Load("Input.xml");
var name = "My-Machine";

var aElement = xDoc.Root.Element("A");

string description = null;
if ((string)aElement.Attribute("Name") == name)
    description = (string)xDoc.Root.Element("error").Element("description");

Name
属性值与
Name
变量匹配时,它将返回元素值。否则
description
将为
null

LINQ很方便,但如果您希望这些文件很大,则不建议使用LINQ。LINQ一次解析整个xml文件。您可以使用
XmlReader
按顺序读取它们。。。对我来说,您现在至少同时问了两个不同的问题:如何读取中的文件,以及如何处理其内容。后者的答案取决于前者。文件不会很大(示例大致与实际文件的大小相同),但可能有数千个xml文件。林克会因此而失去理智吗?我可能会一次问多个问题,如果没有其他原因的话,那就是我对阅读xml了解不够,不能简单地问它。你的问题肯定问了很多。我可能会发布一个完整答案的片断,但我可能不会写完整的东西。您需要迭代目录中的每个文件,逐个读取它们,并将所有名称描述对添加到列表中。之后,您可以使用LINQ的GROUPBY函数按名称分组(并生成计数)。这三个节点是完整的文件吗?是否应该有一些根元素包含该项目列表?此外,描述不是包含名称的
a
的属性或子元素。。。这将使解析文件更加困难/不太一致。我不确定是否有一个XML读取选项的适当内置功能可以简化这一过程。听起来可能不是。我已经更新了这个问题,询问如何使用LINQ将信息放入列表中。
<?xml version="1.0" encoding="UTF-8"?>
<results date="2013-12-29">
<A uniqueId="1234" Name="My-Machine"/>
<error number="556">
<description><![CDATA[House in flood]]></description>
</error>
</results>
Name="MyMachine", description="![CDATA[House is flooding]]";    
Name="MyMachine", description="![CDATA[House on fire]]";    
Name="MyMachine", description="![CDATA[House on fire]]";
var xDoc = XDocument.Load("Input.xml");
var name = "My-Machine";

var aElement = xDoc.Root.Element("A");

string description = null;
if ((string)aElement.Attribute("Name") == name)
    description = (string)xDoc.Root.Element("error").Element("description");