从XML获取一个子部分

时间:2014-05-16 20:54:18

标签: c# xml

我有跟随XML:

<ValidationObject>
<Role name='PM Front End'>
  <FileSystem>
    <Directory path='C:\DeleteMe\HashingTest\Main' ValidateEntireFolder='true'>
      <File path='C:\DeleteMe\HashingTest\Main\1.txt' hashValue='-1109720489'/>
      <File path='C:\DeleteMe\HashingTest\Main\2.txt' hashValue='824588598'/>
      <File path='C:\DeleteMe\HashingTest\Main\3.txt' hashValue='-1033034397'/>
      <Directory path='C:\DeleteMe\HashingTest\Main\Sub1'>
        <File path='C:\DeleteMe\HashingTest\Main\Sub1\Sub1-1.txt' hashValue='-1443348279'/>
        <File path='C:\DeleteMe\HashingTest\Main\Sub1\Sub1-2.txt' hashValue='-666832362'/>
      </Directory>
    </Directory>
    <!--Only two file were selected for validation purposes in the following folder-->
    <Directory path='C:\DeleteMe\HashingTest\Sibling'>
      <File path='C:\DeleteMe\HashingTest\Sibling\1.txt' hashValue='-444971301'/>
      <File path='C:\DeleteMe\HashingTest\Sibling\2.txt' hashValue='-431992169'/>
    </Directory>
  </FileSystem>
</Role>

如果ValidateEntireFolder为true,我需要从XML中提取Direcotry XML片段。从那里我需要一个所有文件XElements的列表。

我尝试使用XmlNode.SelectNodes,但这需要对元素进行精确的XPath。问题是在我的情况下,我不知道所有的XPath。目录节点可以在树中的任何位置。

有人可以帮帮我吗?

由于

2 个答案:

答案 0 :(得分:2)

使用Linq2Xml

var xDoc = XDocument.Load(filename);
var dirs = xDoc.XPathSelectElements("//Directory[@ValidateEntireFolder='true']");

答案 1 :(得分:1)

即使您不知道确切的路径,也可以将XmlNode.SelectNodes与XPath查询一起使用:

XmlNodeList nodeList = xmlDoc.SelectNodes("descendant::Directory[@ValidateEntireFolder='true']");

希望这有帮助。