C# 使用LINQ到XML访问值
我正在研究由另一个应用程序自动生成的XML格式,我想使用Linq to XML遍历XML,但我不确定如何获得所需的值 以下是XML的一个片段:C# 使用LINQ到XML访问值,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我正在研究由另一个应用程序自动生成的XML格式,我想使用Linq to XML遍历XML,但我不确定如何获得所需的值 以下是XML的一个片段: <dict> <key>Major Version</key><integer>1</integer> <key>Tracks</key> <dict> <key>3620</key> <dict>
<dict>
<key>Major Version</key><integer>1</integer>
<key>Tracks</key>
<dict>
<key>3620</key>
<dict>
<key>Track ID</key><integer>3620</integer>
<key>Name</key><string>Ran</string>
<key>Age</key><integer>22</integer>
</dict>
<key>3622</key>
<dict>
<key>Track ID</key><integer>3622</integer>
<key>Name</key><string>Jardine</string>
<key>Age</key><integer>24</integer>
</dict>
由于键的实际值存储为同级节点,因此我使用NextNode
访问这些节点
然而,这就是问题所在。如何根据条件(例如大于某个值)过滤变量ran
中的xelents
我尝试了ran.Any
和ran.Select
,但我不确定要使用哪个lambda表达式。或者我应该在原始的ran
查询中附加我的过滤器吗 使用ElementsAfterSelf.First()
可以转到下一个元素。这段代码假设会有另一个XElement,它是整数元素,值是int。您需要确定您对另一个系统总是以这种格式向您发送XML的信任程度,或者您是否需要编写一些防御性代码
var age = 23;
var ran = xdoc.Root.Elements("dict")
.Elements("dict")
.Elements("dict")
.Elements("key")
.Where(x => (string) x == "Age" && (int) x.ElementsAfterSelf.First() > age)
.Select(x=>x.Parent);
这是一种非常糟糕的XML格式。当两个值属于一起时,不应该仅仅通过它们相邻来表示。不幸的是,XML格式将保留(因为它实际上来自iTunes XML库),并且无法更改它。相反,我使用XSL文件将XML从其当前形式转换为更友好的XML格式,该格式可由.NET中的XElement
读取。然后是一个简单的Linq到XML查询,以过滤出我需要的项。如果有人需要,我这里有XSL。它将XML转换为HTML格式,但我修改了XSL,以便我的应用程序能够正确使用它。
var age = 23;
var ran = xdoc.Root.Elements("dict")
.Elements("dict")
.Elements("dict")
.Elements("key")
.Where(x => (string) x == "Age" && (int) x.ElementsAfterSelf.First() > age)
.Select(x=>x.Parent);