我有一个想要加载到数据集中的 XML 文件。
XML 文件来自我无法控制的日志记录系统;这带来了一些挑战,我在解析时需要帮助......
XML 文件如下所示:
<LogEntry>
<DateTime></DateTime>
<AppId></AppId>
<Description>
<EncryptedData>
<CipherValue></CipherValue>
</EncryptedData>
</Description>
<Module></Module>
</LogEntry>
注意:没有 XML DocType。不确定这对 DataSet 是否必要?
通常,没有根节点。除非程序停止/重新启动,否则文档的“和”开始和结束标记。它似乎在启动时创建根节点,但如果文件在运行时因大小而被删除,它不会重新创建根节点。
问题 #1 - 处理丢失根节点问题的最佳方法是什么?我是否应该在尝试通过 DataSet 的 ReadXML() 函数加载之前打开文件并查找它,并在必要时预先添加 - 并附加?
问题 #2 - 带有子节点的条目似乎没有加载到数据集中。ReadXML() 似乎跳过了这个元素;因为我在尝试访问该特定列时遇到错误,它告诉我它不存在。IE,上面的“描述”。
问题 #3 - 当我加载“描述”列时,我需要访问“CipherValue”数据,因为它是 BASE64 编码的。我将不得不解密这些信息。我有这方面的信息。
访问“描述”列以便我可以解密数据是我进行此练习的主要原因。请注意,确实有更多的列和更多的子节点……但基本思想相同。
我正在尝试使用 DataSet,因为我认为它会使处理相当大的 XML 文件变得更容易?也许有更好的方法?
例如,下面的代码可以工作,但我再次没有看到子节点(我注释掉了返回列不存在的行):
Console.WriteLine("Rows found = {0}", dt.Rows.Count);
foreach (DataRow row in dt.Rows)
{
Console.WriteLine("{0} {1} {2}",
row["DateTime"],
row["AppId"],
//row["Description"],
row["Module"]
);
我想我需要一个 XML 模式——但我不确定如何编写它(即使是上面的示例),以便我可以按照我想要的方式读取数据。
对此的任何帮助或指导将不胜感激。