2010-09-15 80 views
0

I的子集有一个XML象下面这样: -LINQ到XML - 返回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子句过滤器)的所有文档版本节点

我想下面的输入,但将是逗号分隔,例如数字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

回答

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; 
+0

谢谢你:-)它工作 – srivatsayb 2010-09-16 07:02:54

0

拉撒路的答案给你你所需要的。要将其写入新的xml文件,请创建一个新的XElement并保存它:

XElement answer = new XElement("Results", result); 
answer.Save(fileName); 
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");