Linq to XML - возврат подмножества xml - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть XML, как показано ниже: -

<SourceXML>
<Issue ID="123">
<Fields>
<Number>5</Number>
</Fields>
</Issue>
<Issue ID="125">
<Fields>
<Number>8</Number>
</Fields>
</Issue>
<Issue ID="127">
<Fields>
<Number>11</Number>
</Fields>
</Issue>
</SourceXML>

Мне нужно получить все узлы Issue, которые имеют номера 11 или 8 (где фильтр предложений)

но входные данные будут разделены запятыми, например, 8,11

  var result= from c in XElement.Load("path").Elements("Issue")
                         where c.Element("Fields").Element("Number").Value == Input
                          select c;

В основном я хочу следующее

<Issue ID="125">
<Fields>
<Number>8</Number>
</Fields>
</Issue>
<Issue ID="127">
<Fields>
<Number>11</Number>
</Fields>
</Issue>

Также я хочу записать результат в новый файл XML.*

Пожалуйста, скажите мне, как это сделать, я тупица в LINQ

Ответы [ 3 ]

2 голосов
/ 15 сентября 2010

Вы можете попробовать:

string[] values = Input.Split(new char[] { ',' });
var result= from c in XElement.Load("path").Elements("Issue")
                where values.Contains(c.Element("Fields").Element("Number").Value)
                select c;
0 голосов
/ 15 сентября 2010

Вы довольно близко!Попробуйте это.

IEnumerable<XElement> results = from c in XDocument.Load("input.xml").Elements("SourceXML").Elements("Issue")
                                where c.Element("Fields").Element("Number").Value == "8" || c.Element("Fields").Element("Number").Value == "11"
                                select c;

XDocument resultXML = new XDocument();
resultXML.Add(new XElement("SourceXML"));
resultXML.Element("SourceXML").Add(results);
resultXML.Save("output.xml");
0 голосов
/ 15 сентября 2010

Ответ Лазаря дает вам то, что вам нужно.Чтобы записать его в новый XML-файл, создайте новый XElement и сохраните его:

XElement answer = new XElement("Results", result);
answer.Save( fileName );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...