Mat*_*son 14 c# xml linq linq-to-xml
我有一个iPhone应用程序的plist文件.它如下所示:
<plist version="1.0">
<dict>
<key>barcodes</key>
<array>
<string>JF893J89FJ-66666</string>
<string>JF893J89FJ-55555</string>
</array>
<key>currentStep</key>
<integer>1</integer>
<key>dateFinished</key>
<date>2010-05-10T18:33:25Z</date>
<key>dateStarted</key>
<date>2010-05-10T18:33:25Z</date>
<key>description</key>
<string>TEST</string>
<key>geoRequired</key>
<string>N</string>
<key>inProgress</key>
<string>N</string>
<key>jobID</key>
<integer>10085</integer>
<key>jobSteps</key>
<array>
<dict>
<key>label</key>
<string>TEST</string>
<key>response</key>
<string>matt hudson</string>
<key>stepID</key>
<integer>1103</integer>
<key>typeID</key>
<integer>4</integer>
</dict>
</array>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
我需要在jobSteps之后获取数组.
到目前为止我有这个:
XDocument xml = XDocument.Load(rri.Response);
var q = from elements in xml.Descendants("plist").Descendants("dict")
where elements.Value == "jobSteps"
select elements;
Run Code Online (Sandbox Code Playgroud)
但我需要在其中包含jobSteps的元素之后获取下一个项目.
Jon*_*eet 16
我不完全清楚Adam的解决方案是否符合您的要求,但如果没有,您可能需要查看NextNode属性:
获取此节点的下一个兄弟节点.
例如,这会打印数组元素:
using System;
using System.Linq;
using System.Xml.Linq;
class Test
{
static void Main()
{
XDocument doc = XDocument.Load("test.xml");
foreach (var element in doc.Descendants("key")
.Where(x => (string) x == "jobSteps"))
{
Console.WriteLine(element.NextNode);
}
}
}
Run Code Online (Sandbox Code Playgroud)
需要注意的是它的跳跃元素之间的空白-但如果是那和阵列之间的任何文本,这是行不通的-所以你会希望:
Console.WriteLine(element.NodesAfterSelf().OfType<XElement>().First());
Run Code Online (Sandbox Code Playgroud)
编辑
我相信这会让你获得jobSteps节点之后的元素:
XElement elementAfterJobsteps = xml.Descendants("plist").FirstOrDefault().Descendants("jobSteps").FirstOrDefault().ElementsAfterSelf().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
结束编辑
foreach (XElement El in xml.Descendants("plist")) {
var localResults =
from elements in El.Descendants("dict")
where elements.Value == "jobSteps"
select elements;
//process localResults
}
Run Code Online (Sandbox Code Playgroud)
或者,甚至更简单,尝试方法语法
foreach (XElement El in xml.Descendants("plist")) {
var localResults = El.Descendants("dict").Where(dict => dict.Value == "jobSteps");
//process localResults
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11145 次 |
| 最近记录: |