我有以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<game>
<name>Space Blaster</name>
<description></description>
<version>1</version>
<fullscreen>false</fullscreen>
<width>640</width>
<height>640</height>
<c2release>6900</c2release>
</game>
保证只有1个游戏记录。我想检索每个属性值,这是我尝试过的:
string ArcadeXMLLocation = Settings.GamePergatoryLocation + UserID + "/unzipped/arcade.xml";
XDocument loaded = XDocument.Load(ArcadeXMLLocation);
var q = (from c in loaded.Descendants("game") select (string)c.Element("name")).SingleOrDefault();
Response.Write(q.name);
但我似乎无法接受这样的任何价值(intellisense讨厌它!)有人能告诉我它是如何完成的吗?
答案 0 :(得分:2)
我认为您只需要获取元素的值:
string val = doc.Descendants("game")
.Select(x => x.Element("name").Value).FirstOrDefault();
作为上述内容的先决条件,因此intellisense会选择它,请确保导入System.Linq
和System.Xml.Linq
名称空间。
答案 1 :(得分:1)
这将为你带来所有带有“游戏”标签的后代 您只需要FirstOrDefault()来获取唯一的记录(如果存在)。
var q = from c in loaded.Descendants("game")
select new { Name = c.Element("name").Value
Description = c.Element("description").Value
};
q.FirstOrDefault();
答案 2 :(得分:1)
您的查询实际上是正确的(已经过测试并且适用于我),用于提取名称节点的值 - 您正在执行的(string)
强制转换将提取名称节点的值作为字符串,而不是给你节点对象本身,这是Linq到Xml内置的快捷方式之一。剩下的就是打印出名称:
Response.Write(q);
答案 3 :(得分:1)
var q = (from c in loaded.Descendants("game") select (string)c.Element("name")).SingleOrDefault();
Console.WriteLine(q);
就够了。或者避免演员
var q = (from c in loaded.Descendants("game") select c.Element("name").Value).SingleOrDefault();
Console.WriteLine(q);