我将 xml 文件加载到递归字典中,以便我可以通过以下方式访问 xml 文件: Example.xml:
<objects>
<object>
<id>256</id>
<objectType>Person</objectType>
<name>Bob</name>
<object>
<id>128</id>
<objectType>BodyType</objectType>
<shape>Athletic</shape>
</object>
<object>
<id>1024</id>
<objectType>Body-Measurements</objectType>
<height>5'9"</height>
<weight>155</weight>
</object>
</object>
<object>
<id>512</id>
<objectType>T-Shirt</objectType>
<object>
<id>64</id>
<objectType>Logo</objectType>
<design>Dragon-Tatoo</design>
<object>
<id>64</id>
<objectType>Design-Color</objectType>
<color>black</color>
</object>
</object>
</object>
使用递归字典的示例 C# 代码:
RecursiveDictionary RE = loadXML("Example.xml");
Console.WriteLine( ToInt(RE["objects"]["0"]["object"]["id"]) . "\n" );
Console.WriteLine( RE["objects"]["0"]["object"]["0"]["object"]["1"]["height"] . "\n" );
Console.WriteLine( ToConsoleColor(RE["objects"]["1"]["object"]["0"]["object"]["0"]["object"]["color"]).ToString() . "\n" );
示例输出:
128
5'9"
black
ToConsoleColor()
不需要打印字符串 'black' 但在我的真实应用程序中我会进行转换,然后将控制台颜色设置为 的枚举值ToConsoleColor()
返回。在这种情况下,我只是打印 ToString() 来显示我想要的效果,即在递归字典中提取 XML,然后访问 xml 文件的详细信息并将它们转换为有用的程序数据类型(在此case 控制台枚举值)。
我有代码在尝试转换任何内容之前检查键/值或标签/值是否存在,并打印出错误让我知道我没有处理特定的 xml 标签以及原因。无论是否有错误 xml,代码都会尽可能地运行。
我想知道与使用 X-Paths 相比,这样做的缺点是什么。
最佳答案
这种方法可能没有内在的错误(尽管存在一些缺陷(见下文)),但我的主要问题是为什么?
这是一个常见问题,很多比我们聪明的人都遇到过并提出了解决方案;为什么不使用他们经过实战检验的解决方案?
您不想这样做的几个原因:
- 您不能查询您的数据
- 此数据更适合 JSON 而不是 XML,但请忽略这一点——当您想基于属性(或者实际上,元素名称以外的其他内容)进行查询时会发生什么
- 你失去了强类型属性的好处
- 看起来您只是在制作子字典,其键是集合中的索引...这比使用
XPathNavigator
并遍历选定节点的子节点更容易吗?
- 看起来您只是在制作子字典,其键是集合中的索引...这比使用
作为初级程序员,我确实看到了编写这样的东西以获得经验的值(value),但这不属于产品代码——存在太多潜在问题而实际功能不足。
我将根据我作为程序员的经验给你一些建议:在很长一段时间内,你会想要重新发明轮子,因为你可以......学习东西很好(我被困在这里一段时间)。当你真的在搭帐篷时,一定不要自欺欺人地认为你在 build 摩天大楼(并不是说这就是这里发生的事情;只是一般性建议)。
关于C#使用递归字典存储xml有什么缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32876649/