这可能是非常简单的事情,但我无法理解它,所以请帮助我们。)
我有一个简单的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 :(得分:0)
XElement.Value
为string,因此既不需要投射(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
获取您可以执行的描述
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;