使用Linq-to-Xml和一些循环读取几个元素?

时间:2015-09-30 13:55:14

标签: c# .net xml visual-studio-2010 .net-4.0

使用以下代码,我正在阅读每个<ns>CounterSales</ns>的{​​{1}}(第3个元素),这很棒。我包含了代码和XML。

这是代码,如果<nv>是硬编码的话,效果很好:

ElementAt

以下是var xDoc = XDocument.Parse(xmlStr); var nvs = xDoc.Descendants("nv"); var nads = nvs.Select(nv => nv.Elements("nad").First().Value).ToList(); var thirdRs = nvs.Select(nv => nv.Elements("r").ElementAt(2).Value).ToList(); 的价值:

xmlStr

但是,我想说我想阅读多个计数器。我有一个数据表,目前有两行:<ni> <nss>20150927</nss> <gp>Addon</gp> <ns>CounterBlah1</ns> <ns>CounterBlah2</ns> <ns>CounterSales</ns> <ns>CounterBlah4</ns> <ns>CounterBlah5</ns> <ns>CounterBlah6</ns> <nv> <nad>Style=1,Rfu=1,Id=132</nad> <r>0</r> <r>15</r> <r>8</r> <r>3</r> <r>2</r> <r>2</r> </nv> <nv> <nad>Style=1,Rfu=1,Id=433</nad> <r>0</r> <r>15</r> <r>30</r> <r>3</r> <r>2</r> <r>2</r> </nv> <nv> <nad>Style=1,Rfu=1,Id=665</nad> <r>0</r> <r>15</r> <r>90</r> <r>3</r> <r>2</r> <r>2</r> </nv> </ni> &amp; [CounterSales]。我想以同样的方式处理其他两个计数器:

[CounterBlah5]

感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,这就是你需要的

- (BOOL)validateUrl: (NSURL *)candidate
{
    NSURLRequest *req = [NSURLRequest requestWithURL:candidate];
    return [NSURLConnection canHandleRequest:req];
}

修改:从this帖子中查找DataTable results = GetCounters(); //results has two rows: [CounterSales] & [CounterBlah5] foreach (DataRow row in results.Rows) { string counter = cellRow["counter"]; //counter equals "CounterSales" /* Iterate through all <ns> to see where "CounterSales" is located. In this case, index = 2. On next foreach, index equals 4 */ var xDoc = XDocument.Parse(xmlStr); //here we find the index var requiredIndex = xDoc.Descendants("ns") .Select((node, idx) => new { node, idx}) .First(x => x.node.Value.Equals(counter)).idx; var nvs = xDoc.Descendants("nv"); var nads = nvs.Select(nv => nv.Elements("nad").First().Value).ToList(); var thirdRs = nvs.Select(nv => nv.Elements("r").ElementAt(requiredIndex).Value).ToList(); } 索引的较短语法。

List<T>