【发布时间】:2012-03-04 20:53:12
【问题描述】:
我正在编写一些代码来解析以下格式的 xml 文件(为简单起见被截断)
<?xml version="1.0" encoding="UTF-8"?>
<ship name="Foo">
<base_type>Foo</base_type>
<GFX>fooGFX</GFX>
....
</ship>
我正在使用一个由参数键对和值的 xpath 组成的字典,并查询它以将所有值加载到各种变量中。但是,我注意到会有大量的代码重复。事实上,对于我希望检索的每个值,我都必须编写另一行几乎相同的代码。这是我的代码:
class Ship
{
public Ship()
{
paths = new Dictionary<string, string>();
doc = new XmlDocument();
//Define path to various elements
paths.Add("name", "/ship/@name");
paths.Add("base_type", "/ship/base_type");
paths.Add("GFX", "/ship/GFX");
}
public void LoadFile(string filename)
{// Loads the file and grabs the parameters
doc.Load(filename);
Name = doc.SelectSingleNode(paths["name"]).Value;
Base_type = doc.SelectSingleNode(paths["base_type"]).Value;
GFX = doc.SelectSingleNode(paths["GFX"]).Value;
}
public Dictionary<string, string> paths; //The XPaths to the various elements, define them in constructor
public XmlDocument doc;
public string Name;
public string Base_type;
public string GFX;
}
注意这里的重复:
variable = doc.SelectSingleNode(paths["variable_name"]).value.
会有更多的变量,所以这个部分会很庞大。
还有什么可以简化的吗?如果这是 C++,我可能会尝试使用指针,但我知道不建议在 C# 中使用它们,那么有没有类似的方法?
我会寻找可以提供变量名称和 xpath 列表的东西,并让代码提取所有值并以某种循环或其他方式将它们加载到变量中。我想使用 XPaths,因为我希望这个文件的格式可能会定期更改。
有什么想法吗?
提前致谢。
编辑:我还希望能够修改这些数据并将其保存回来。如有必要,我不反对保存一棵全新的树,但如果可能的话,最好在适当的位置修改数据。我不需要修改的解决方案,但我只需要打开这个选项。
【问题讨论】:
-
最后一部分 - 保存更改 - 使用 XmlSerializer 类的另一个主要方法 - Serialize() 可以方便地完成。
标签: c# xml xpath dictionary code-duplication