使用Linq到Xml获取Xml属性的值

时间:2015-03-12 07:47:25

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

我有这样的XML:

<?xml version="1.0" encoding="utf-8"?>
<Projects>
  <Project>
    <Name>Projekt0</Name>
    <Information>
      <Version>1.0</Version>
      <Info>test-project</Info>
      <CreateDate>25.02.2015</CreateDate>
    </Information>
    <Files ID="1" path="D:\Data\ID1">
      <file>one_file</file>
      <file>another_file</file>
    </Files>
    <Files ID="2" path="D:\Data\ID2">
      <file>someFile.txt</file>
    </Files>
  </Project>
</Projects>

它包含更多&#34;项目&#34; -Nodes,但这不是必需的。

首先,我用它的名字选择一个特定的项目。这已经成功,并且以这种方式完成:

var entries = from items in xelement.Elements("Project")
                      where (string)items.Element("Name").Value == projectName
                      select items;

条目现在包含所需项目的所有内容。

我的一种方法需要知道两个&#34;文件&#34; -Nodes的路径值。 我已经尝试了一些东西,但它还没有用完。

我的第一次尝试是创建一个新的&#39; var&#39;喜欢&#39;条目&#39;,将其转换为数组,并选择索引以将值保存为字符串。

var path1 = from item in entries.Elements("Files")
            where (string)item.Attribute("ID").Value == "1"
            select item.Attribute("path").Value;
string path01 = path1.toArray()[0];

这不起作用,我不知道为什么。我很抱歉,如果这是一个初学者的问题,但我还没有完成xml&amp; linq尚未。

编辑:

较低的条目&#39; variable是第一个linq-code的输出。所以&#39;条目&#39;包含整个项目。 目前,path1不包含任何元素。

1 个答案:

答案 0 :(得分:2)

entries是一系列Project节点。在搜索ID属性

之前获取文件子节点
var path1 = from item in entries.Elements("Files")
        where (string)item.Attribute("ID").Value == "1"
        select item.Attribute("path").Value;