我似乎在使用C#检索XML值时遇到问题,我知道这是因为我对C#和.XML的知识非常有限.
我得到了以下XML文件
<PowerBuilderRunTimes>
<PowerBuilderRunTime>
<Version>12</Version>
<Files>
<File>EasySoap110.dll</File>
<File>exPat110.dll</File>
<File>pbacc110.dll</File>
</File>
</PowerBuilderRunTime>
</PowerBuilderRunTimes>
Run Code Online (Sandbox Code Playgroud)
我将处理XML文件,并确保文件夹中存在的每个文件(这是简单的部分).这是我难以处理的XML文件的处理.这是我到目前为止所做的:
var runtimeXml = File.ReadAllText(string.Format("{0}\\{1}", configPath, Resource.PBRuntimes));
var doc = XDocument.Parse(runtimeXml);
var topElement = doc.Element("PowerBuilderRunTimes");
var elements = topElement.Elements("PowerBuilderRunTime");
foreach (XElement section in elements)
{
//pbVersion is grabbed earlier. It is the version of PowerBuilder
if( section.Element("Version").Value.Equals(string.Format("{0}", pbVersion ) ) )
{
var files = section.Elements("Files");
var fileList = new List<string>();
foreach (XElement area in files)
{
fileList.Add(area.Element("File").Value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是字符串列表只填充了一个值"EasySoap110.dll",其他一切都被忽略了.有人可以帮助我,因为我不知所措.
Jon*_*eet 10
看看这一点:
var files = section.Elements("Files");
var fileList = new List<string>();
foreach (XElement area in files)
{
fileList.Add(area.Element("File").Value);
}
Run Code Online (Sandbox Code Playgroud)
您将迭代每个Files
元素,然后查找其中的第一个File
元素.只有一个Files
元素 - 您需要迭代其中的File
元素.
但是,肯定有更好的方法可以做到这一点.例如:
var doc = XDocument.Load(Path.Combine(configPath, Resource.PBRuntimes));
var fileList = (from runtime in doc.Root.Elements("PowerBuilderRunTime")
where (int) runtime.Element("Version") == pbVersion
from file in runtime.Element("Files").Elements("File")
select file.Value)
.ToList();
Run Code Online (Sandbox Code Playgroud)
请注意,如果有多个匹配PowerBuilderRunTime
的元素,这将创建一个列表所有的文件,所有这些元素.这可能不是你想要的.例如,您可能需要:
var doc = XDocument.Load(Path.Combine(configPath, Resource.PBRuntimes));
var runtime = doc.Root
.Elements("PowerBuilderRunTime")
.Where(r => (int) r.Element("Version") == pbVersion)
.Single();
var fileList = runtime.Element("Files")
.Elements("File")
.Select(x => x.Value)
.ToList();
Run Code Online (Sandbox Code Playgroud)
这将验证只有一个匹配的运行时.
归档时间: |
|
查看次数: |
561 次 |
最近记录: |