Linq to XML получить один узел - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть следующий 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 ненавидит это!) Может кто-нибудь показать мне, какэто сделано?

Ответы [ 4 ]

2 голосов
/ 23 ноября 2011

Я думаю, вам просто нужно получить значение элемента:

string val = doc.Descendants("game")
    .Select(x => x.Element("name").Value).FirstOrDefault();

В качестве предварительного условия к вышесказанному, и поэтому intellisense подхватывает его, убедитесь, что вы импортируете System.Linq и System.Xml.Linq пространства имен.

1 голос
/ 23 ноября 2011
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);
1 голос
/ 23 ноября 2011

Вы действительно правильно (проверено и работало для меня) для извлечения значения узла имени - выполняемое вами приведение (string) извлечет значение узла имени в виде строки ине дать вам сам объект узла, это один из ярлыков, встроенных в Linq для Xml.Осталось только распечатать имя:

Response.Write(q);
1 голос
/ 23 ноября 2011

Это даст вам всех потомков с тегом "game". Вам просто нужно FirstOrDefault (), чтобы получить единственную запись, если она существует.

             var q = from c in loaded.Descendants("game")
                select new { Name = c.Element("name").Value
                             Description = c.Element("description").Value
                };

             q.FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...