【问题标题】:Nesting XmlReader嵌套 XmlReader
【发布时间】:2012-11-21 20:02:25
【问题描述】:

我需要搜索一个 xml 文件,找到一个数据集,检查第二个 xml 文件,检查是否有相关数据,然后转到下一个数据集。

这里有一些示例代码来说明:

XmlReader XmlDoc1 = XmlReader.Create("~/data/xml/myxml1.xml",settings);
XmlReader XmlDoc2= XmlReader.Create("~/data/xml/myxml2.xml",settings);

using (XmlDoc1) {
    XmlDoc1.Open();
    //get a data node
    using(XmlDoc2){
        XmlDoc2.Open();
        //find related information... if it's there
        XmlDoc2.Close();
   }
   //do stuff
   XmlDoc1.Close();
}

我很确定上面的代码会产生错误,但是读取 XmlDoc1、获取数据集、关闭它、搜索 XmlDoc2、关闭它会太耗时……清洗、冲洗、重复。所以,我正在寻找一种快速的方法来完成上述工作。

在你问之前,我不能在这个网站上运行数据库,所以 XML 就足够了。

【问题讨论】:

  • 我个人会使用XmlDocumentXDocument 类来解析你的xml
  • 那是我的第一次构建……太慢了。有问题的 xml 文件相当大。
  • 虽然...我没有看过 XDocument...hmmm

标签: c# xmlreader


【解决方案1】:

同时打开两个阅读器没有问题。但是,您不能在处理后重用XmlDoc2(通过using 块)。

XmlReader 是只进的,所以基本上你每次迭代都要经过XmlDoc2

如果您关心速度,您可以尝试让XmlDoc1 成为XmlReader(当您从上到下运行一次时)并使用建议的XmlDocumentXDocument 类之一用于内部 xml。

【讨论】:

  • 一边琢磨一边,我开始想同样的事情......所以我不知道,你只能打开和关闭一个阅读器(SQL 或其他)一次?这可能是我之前看到的错误的根源。我试试看。
  • 对于IDataReaders(SQL 读者),每个连接通常只能同时打开一个。 XmlReader 不应该关心其他 XmlReaders(除非它们共享相同的数据源,但在您的情况下有两个不同的文件)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
相关资源
最近更新 更多