读取特定 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。
我目前正在处理一个项目,其中必须读取 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。