Запись запроса LINQ to XML для фильтрации XML-строки - PullRequest
1 голос
/ 10 января 2012

У меня есть следующая строка xml:

<report>
    <item id="4219" Co="6063" LastName="Doe" FirstName="John"/>
    <item id="2571" Co="6063" LastName="Doe" FirstName="Jane"/>
</report>

Как мне написать запрос Linq to xml, который фильтрует по имени = "Jane" и записывает его обратно в строку xml

Пока у меня есть следующий код:

XDocument reportXmlDoc = XDocument.Parse(_report); //This is the string var assigned with data above
var filteredList = from x in fullReportXmlDoc.Descendants("item")
             where x.Attribute("FirstName").Value == "Jane"
             select x;

Как мне преобразовать FilterList обратно в строку XML?

Ответы [ 2 ]

0 голосов
/ 10 января 2012

Вы можете проецировать новое дерево XML из существующего запроса:

var filteredList =
    from x in fullReportXmlDoc.Descendants("item")
    where x.Attribute("FirstName").Value == "Jane"
    select new XElement("report", x).ToString();

Или, возможно, в более общем случае:

string result = new XElement("report",
    from x in fullReportXmlDoc.Descendants("item")
    where x.Attribute("FirstName").Value == "Jane"
    select x).ToString();
0 голосов
/ 10 января 2012

Вы пытались использовать SaveOptions.DisableFormatting, чтобы получить XML-строку XElement?Для вашего случая это будет выглядеть примерно так:

XDocument reportXmlDoc = XDocument.Parse(_report); //This is the string var assigned with data above
var elementStrings = from x in fullReportXmlDoc.Descendants("item")
    where x.Attribute("FirstName").Value == "Jane"
    select x.ToString(SaveOptions.DisableFormatting);
...