使用数据集读取具有子节点的XML文件
本文关键字:子节点 XML 文件 数据集 读取 | 更新日期: 2023-09-27 17:57:43
我有一个XML文件要加载到数据集中。
XML文件来自一个我无法控制的日志系统;这带来了一些挑战,我需要帮助进行解析。。。
XML文件如下所示:
<LogEntry>
<DateTime></DateTime>
<AppId></AppId>
<Description>
<EncryptedData>
<CipherValue></CipherValue>
</EncryptedData>
</Description>
<Module></Module>
</LogEntry>
注:没有XML DocType。不确定这对于数据集是否必要?
通常,没有根节点。例如文档的"answers"打开和关闭标记,除非程序停止/重新启动。它似乎在启动时创建根节点,但如果在运行时由于文件大小而删除文件,它将不会重新创建根节点。
问题#1-处理缺少根节点问题的最佳方法是什么?在尝试通过DataSet的ReadXML()函数加载之前,我是否应该打开文件并查找它,并在必要时进行前缀和附加?
问题#2-数据集中似乎未加载具有子节点的条目。ReadXML()似乎正在跳过此元素;因为我在尝试访问那个特定的列时遇到了一个错误,它告诉我它不存在。即,上文"说明"。
问题#3-当我加载"Description"列时,我需要accdess"CipherValue"数据,因为它是BASE64编码的。我必须解密这些信息。我有这方面的信息。
访问"描述"列以便解密数据是我进行此练习的主要原因。请注意,实际上有更多的列和更多的子节点。。。但基本思想是一样的。
我尝试使用数据集是因为我认为它会使处理相当大的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模式,但我不知道如何编写它(即使是上面的例子),这样我就可以按照我想要的方式读取数据。
如有任何帮助或指导,我们将不胜感激。
DataSet类不适用于通用的XML输入和输出。它是关系数据库模型的内存表示。它不能表示任何不能表示为关系数据库的内容。
您的数据可以建模为具有DateTime
、AppId
和Module
列的LogEntry
表。但什么是Description
?它不是EncryptedData
表的外键-两边都没有id!