在LINQ查询中使用.Value的问题

时间:2010-12-06 15:43:19

标签: c# xml linq linq-to-xml

这可能是非常简单的事情,但我无法理解它,所以请帮助我们。)

我有一个简单的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 :(得分:0)

XElement.Valuestring,因此既不需要投射(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

所以你的代码对我很有用。

答案 1 :(得分:0)

这很奇怪,因为我只是运行了你的代码并得到了

  

testvar1 - int32 - 10
  testvar2 - string -
  testvar3 - float - 42.00

有或没有param.Value

的String强制转换

获取您可以执行的描述

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

答案 2 :(得分:0)

我遇到了问题:

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

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

但这个似乎有效:

var description = doc.Descendants("description").First().Value;