读取特定 XML 参数

Reading specific XML parameter

我目前正在处理一个项目,其中必须读取 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。但我需要:电视

然后将其用作程序其他部分的字符串/整数。

有人可以帮我吗?

Value 属性 returns 其子节点的串联文本。 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