Linq to XML - 返回xml的子集

时间:2010-09-15 15:20:23

标签: c# xml winforms linq

我有如下的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>

我必须得到编号为11或8(where子句过滤器)的所有Issue节点

我尝试了以下但输入将是逗号分隔数字,例如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 个答案:

答案 0 :(得分:2)

你可以尝试:

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;

答案 1 :(得分:0)

Lazarus的回答可以满足您的需求。要将其写入新的xml文件,请创建一个新的XElement并保存它:

XElement answer = new XElement("Results", result);
answer.Save( fileName );

答案 2 :(得分:0)

你非常接近!试试这个。

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");