【问题标题】:Load something other than the root node of an XML file using ReadXML使用 ReadXML 加载 XML 文件根节点以外的其他内容
【发布时间】:2013-09-03 17:59:20
【问题描述】:

我正在尝试使用 .NET 将 XML 文件加载到嵌入式数据库 (SQLite) 中。我发现最好的方法是将数据读入 DataTable/DataSet,然后使用 DataAdapter 将该 DataTable 更新到数据库表中。

问题是,我必须使用的 XML 文件包含不在根节点中的数据。有根节点(表),然后是子节点(tableXXX),所有数据都在子节点中。

当我使用 ReadXML(用于 DataSet 对象)时,它只是读入一条记录(包含子节点表的名称)。我想完全忽略根节点,将第一个子节点视为根节点。

我该怎么做呢?

(或者,如果有更简单的方法可以将 XML 文件加载到数据库中,我也很想听听,尽管我猜我仍然需要解决这个根节点问题)。

WATYF

【问题讨论】:

    标签: .net xml dataset readxml


    【解决方案1】:
    string xml = "<tables><table1><col1>xyz</col1></table1></tables>";
    
    DataSet ds = new DataSet();
    ds.ReadXml(XDocument.Parse(xml).Root.Element("table1").CreateReader());
    
    var value = ds.Tables[0].Rows[0]["col1"].ToString(); //<-- xyz
    

    编辑

    • XDocumentSystem.Xml.Linq 命名空间中

    • 代码可以是

      ds.ReadXml(XDocument.Parse(xml).Root.Elements().First().CreateReader());

    【讨论】:

    • 几个问题。首先,XDocument 对象在哪里?其次,我没有固定的子节点名称。文件的前几行如下所示: 问题是表名(“MyTableName”)发生了变化,而我没有无法控制。我如何使用这种方法来解释这一点?
    • 好吧,那没用。我收到一个设计时错误,说“元素”中没有“第一个”对象。
    • 我最终尝试了 XDocument 的其他几种方法。 “解析”不起作用,因为我需要从文件(不是内存中的字符串)中读取 XML。我发现我能够使用 XDocument.ReadFrom 加载数据。我创建了一个 XMLReader,使用 ReadFrom 创建了一个 XElement,然后使用了 XElement.CreateReader。问题是我的 xml 文件的格式非常糟糕(比我想象的要多),使其无法被 ds.ReadXML 解读。最终数据是由一个简单的 ds.ReadXML("filepath") 加载的,但它正在创建多个表,其中没有一个包含有用格式的数据。
    • 说了这么多,你的建议让我找到了一些东西(XDocument),它可以用来有选择地将部分 XML 文件传递​​给 ReadXML,所以我会给你答案,即使我坚持使用的文件格式非常糟糕,以至于 XDocument 不足以保存它。 :o)
    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多