我目前正在开发一个项目,其中必须读取xml文件以进行程序设置。
XML看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<!-- Settings for Modul1 -->
<root>
<Program-Config>
<Parameter>Name</Parameter>
<Value>John</Value>
</Program-Config>
<Program-Config>
<Parameter>Device</Parameter>
<Value>TV</Value>
</Program-Config>
.
.
.
</root>
此结构也用于填充数据网格视图,如下所示:
Parameter | Value
__________|______
Name | John
Device | TV
这是有效的,我可以保存对xml文件所做的更改。
但是我的问题是我需要读出xml文件的特定元素,但它没有那么好用。
我的代码:
string dir;
dir = Directory.GetCurrentDirectory() + "\\config.xml";
XDocument xDoc = XDocument.Load(dir);
var xmlStr = File.ReadAllText(dir);
var str = XElement.Parse(xmlStr);
var result = str.Elements("Program-Config").
Where(x => x.Element("Parameter").Value.Equals("Device")).ToList();
for (int i = 0; i <= result.Count - 1; i++)
{
Console.WriteLine(result[i].Value);
}
但他在Console中写道:DeviceTV。但我需要:电视
然后将其用作字符串/ int,用于程序的其他部分。
任何人都可以帮助我吗?
答案 0 :(得分:0)
Value
属性返回其子节点的连接文本。 result[i]
返回的元素是Parameter
元素,但您只想要其子Value
元素。
var value = (string) str.Elements("Program-Config")
.Where(x => (string) x.Element("Parameter") == "Device")
.Elements("Value")
.Single();
不清楚为什么你要做XDocument.Load
并把它扔掉。您可以通过稍微调整查询来使用该文档:
var value = (string) xDoc.Descendants("Program-Config")
.Where(x => (string) x.Element("Parameter") == "Device")
.Elements("Value")
.Single();
有关正常工作的演示,请参阅this fiddle。