我正在研究一种使用 xml 解析数据的方法。
我收到的文件包含如下所示的行:
George | Washington | Carver
或者其他人可以给我发这样的东西
Carver | Washington | George
等等...
无论格式是什么,无论谁向我发送文件,也会向我发送有关如何解析文件的规则。在第一个示例中,它是名字 | 中间名 | 姓。在第二个示例中,它是姓氏 | 中间名 | 名
我没有为每种可能性编写一个特例,而是创建了一个 XML 文件来描述元数据。
<file>
<first>0</first>
<middle>1</middle>
<last>2</last>
</file>
例如,在这种情况下。该标签first
对应于0
指示名字出现在第 0 位。
直觉上,我想创建一个字典,键设置为标签,值设置为文本。像这样...
public static IDictionary<string, string> GetLookupTable(string xmlContents)
{
XElement xmlElement = XElement.Parse(xmlContents);
IDictionary<string, string> table = new Dictionary<string, string>();
foreach (var element in xmlElement.Elements())
{
table.Add(element.Name.LocalName, element.Value);
}
return table;
}
但是,我对 .NET 的实现并不是很熟悉,这让我对一些东西提出了质疑。
只遍历
XElement
而不是创建字典会更好吗?我认为这不是一个好主意,因为我相信XElement
遍历可能涉及无序树遍历以获得我需要的东西。为每个属性(我有不止 3 个)执行此操作将非常低效。我只是在这里猜测...dictionary
是从常数时间检索吗?我知道在 JavaHashMap
中有不断的获取。如果 c# 也是如此,那么这似乎是一条更好的路线,因为我只需遍历一次,然后就可以在恒定时间内检索我需要的任何内容。