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

时间:2013-12-30 22:21:39

标签: c# xml linq linq-to-xml

我有一个装满xml文件的文件夹。在这些文件中,许多文件共享一个公共属性(Name),但具有不同的辅助属性。我想根据读取这些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>

文件2

<?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>

文件3

<?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]]";

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

1 个答案:

答案 0 :(得分:1)

以下是从一个文件中读取description元素内容的方法:

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