我有如下的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中是假的
答案 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");