Допущения
Поскольку вы зацикливаетесь на своем коде и хотите создать коллекцию, я предполагаю, что фактический Xml-файл имеет несколько testfixture
узлов внутринапример, приведенный ниже пример:
<root>
<testfixture name="1" description="a">
<categories>
<category>abc_somewords</category>
</categories>
<test name="a" description="a">
<dependencies>
<dependson typename="dependsonthis" />
</dependencies>
</test>
</testfixture>
<testfixture name="2" description="a">
<categories>
<category>another_value</category>
</categories>
<test name="b" description="a">
<dependencies>
<dependson typename="secondentry" />
</dependencies>
</test>
</testfixture>
<testfixture name="3" description="a">
<categories>
<category>abc_somewords</category>
</categories>
<test name="c" description="a">
<dependencies>
<dependson typename="thirdentry" />
</dependencies>
</test>
</testfixture>
</root>
Код, использующий Linq to Xml
Для использования Linq необходимо указать следующие пространства имен:
using System.Linq;
using System.Xml.Linq;
Использование Linq To Xml в приведенной выше предполагаемой структуре файла xml будет выглядеть следующим образом:
// To Load Xml Content from File.
XDocument doc1 = XDocument.Load(@"C:\MyXml.xml");
Collection<string> DependentNodes = new Collection<string>();
var results =
doc1.Root.Elements("testfixture")
.Where(x => x.Element("categories").Element("category").Value.Contains("abc_somewords"))
.Elements("test").Elements("dependencies").Elements("dependson").Attributes("typename").ToArray();
foreach (XAttribute attribute in results)
{
DependentNodes.Add(attribute.Value.Trim());
}
Результат
Полученная коллекция будет содержать следующее:
Как видите, только текст атрибута typename
был извлечен там, где узлы dependson
где в узле testfixture
, который содержал узел category
со значением abc_somewords
.
Дополнительные примечания
Если вычитать xml из строки, вы также можете использовать это:
// To Load Xml Content from a string.
XDocument doc = XDocument.Parse(myXml);
Если ваша complete Xml структура отличается, не стесняйтесьопубликуйте его, и я изменю код для соответствия.
Веселитесь.