2010-12-06 39 views
2

这可能是一些非常简单的,但我不能让我的头周围这样的帮助,将不胜感激:)问题在LINQ查询使用.value的

我有,我想解析一个简单的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元素的值:)你能帮我解决这些问题吗?

谢谢。

回答

0

我是有问题的:

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

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

但是这一次似乎工作:

var description = doc.Descendants("description").First().Value; 
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 

所以你的c颂歌对我有用。

+0

谢谢你的答案,但有或没有投我还没有看到任何输出。 – Hamza 2010-12-06 15:52:08

+0

@Hamza:查看我的更新后文章 – abatishchev 2010-12-06 15:56:48

0

,因为我只是跑你的代码,并得到

testvar1奇怪 - INT32 - 10
testvar2 - 字符串 -
testvar3 - 浮 - 42。00

有或无的param.Value

字符串投拿到描述,你可以做

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