Проблема с использованием .Value в запросе LINQ - PullRequest
2 голосов
/ 06 декабря 2010

Возможно, это что-то чрезвычайно простое, но я не могу обойти это, поэтому помощь будет принята:)

У меня есть простой XML-файл, который я хочу проанализировать, и у меня возникла проблемадоступ к значениям элемента.

Это XML-документ, который у меня есть:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<application>
    <description>
        <![CDATA[ This is the description of the application. ]]>
    </description>    
    <parameters>
        <param type="int32" name="testvar1" required="false">10</param>
        <param type="string" name="testvar2" required="true" />
        <param type="float" name="testvar3">42.00</param>
    </parameters>
</application>

Я загружаю документ из текстового поля, например:

var doc = XDocument.Parse(textBox1.Text);

И я используюпростой запрос Linq для фильтрации содержимого:

var parameters = from param in doc.Descendants("param")
                 select new
                 {
                     name = (String)param.Attribute("name"),
                     type = (String)param.Attribute("type"),
                     value = (String)param.Value, // Wrong?
                 };

var data = String.Empty;
foreach (var p in parameters)
{
    data += p.name;
    data += " -- ";
    data += p.type;
    data += " -- ";
    data += p.value;
    data += "\n\r";
}

Вывод выглядит следующим образом:

testvar1 -- int32 -- 
testvar2 -- string -- 
testvar3 -- float -- 

Другими словами, строка value = (String)param.Value, похоже, не дает желаемого эффекта.

РЕДАКТИРОВАТЬ: Кажется, я не читал правильный файл XML, мой плохой.Однако приведенный ниже вопрос остается в силе ...

Кроме того, следующие строки вызывают исключение NullReferenceException:

var description = (String) doc.Element("description").Value;

Так что, похоже, я не совсем понимаю, как получить значениеЭлементы XML :) Не могли бы вы помочь мне исправить это?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 06 декабря 2010

Это странно, потому что я просто запустил твой код и получил

testvar1 - int32 - 10
testvar2 - строка -
testvar3 - float - 42.00

с или без струнного состава param.Value

чтобы получить описание, которое вы могли бы сделать

doc.Element("application").Element("description").Value;
0 голосов
/ 06 декабря 2010

У меня были проблемы с:

var description = doc.Element("application").Element("description").Value;

или

var description = doc.Element("description").Value;

но этот, кажется, работает:

var description = doc.Descendants("description").First().Value;
0 голосов
/ 06 декабря 2010

XElement.Value - это строка , поэтому не требуется ни приведение (string), ни ToString().

<ч />

Используйте

doc.Element("application").Element("description").Value

для получения значения описания

<ч />
foreach (var p in parameters)
{
    Console.WriteLine("name={0} type={1} value={2}", p.name, p.type, p.value);
}

выводит следующий:

name=testvar1 type=int32 value=10
name=testvar2 type=string value=
name=testvar3 type=float value=42.00

так что ваш код работает для меня.

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