【问题标题】:C# Dividing XML into partsC# 将 XML 分成几部分
【发布时间】:2016-06-14 08:14:37
【问题描述】:

我正在尝试将 XML 文件分成几部分 我有一个这样的 XML 文件

<?xml version="1.0" encoding="utf-8"?>
<RegistrationOpenData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://example.gov">
<Description>Registration data is collected by ABC XYZ</Description>
<InformationURL>http://www.example.com/html/hpd/property-reg-unit.shtml</InformationURL>
<SourceAgency>ABC Department of Housing</SourceAgency>
<SourceSystem>PREMISYS</SourceSystem>
<StartDate>2016-02-29T00:03:06.642772-05:00</StartDate>
<EndDate i:nil="true" />
<Registrations>
<Registration xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<RegistrationID>1</RegistrationID>
<BuildingID>1A</BuildingID>
<element1>E11</element1>
<element2>E21</element2>
<element3>E31</element3>
<element4>E41</element4>
</Registration>
<Registration xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<RegistrationID>2</RegistrationID>
<BuildingID>2A</BuildingID>
<element1>E21</element1>
<element2>E22</element2>
<element3>E32</element3>
<element4>E42</element4>
</Registration>
</Registrations>
</RegistrationOpenData>

我正在尝试通过此代码获取节点数

XmlDocument doc = null;
doc = new XmlDocument();
doc.Load(@"D:\Registrations20160229.xml");
XmlNodeReader nodeReader = new XmlNodeReader(doc);
XmlElement root = doc.DocumentElement;
XmlNodeList elemList = root.GetElementsByTagName("Registration");
int totalnode = elemList.Count;
int nodehalf = totalnode / 2;
MessageBox.Show(nodehalf.ToString());

但是在这之后我无法继续,这个代码我用来计算注册节点的数量,然后把它们分成两半,现在我不知道如何进一步分割这个文件,我总共有 158718文件中的条目(注册节点)(有时甚至更多),我试图将所有内容分成几部分,可能是 3 到 4 个部分。

【问题讨论】:

  • 您能告诉我们您看到的实际症状是什么吗?没有必要将文件分成 3 到 4 个部分。当你说“它因为尺寸而失败”时,你能详细说明一下吗?您收到什么错误消息?
  • 我试图将它加载到一个数组中,然后运行“for循环”以获取 30,000 个条目的一部分,但它无法一次加载完整的文件并显示内存不足异常
  • 请显示无效的代码。您向我们展示了一个代码块,然后告诉我们不同的代码块不起作用。

标签: c# xml winforms


【解决方案1】:

试试这个,它不应该将整个 xml 加载到内存中

        using(XmlReader reader = XmlReader.Create(new FileStream(@"D:\Registrations20160229.xml" , FileMode.Open))){
                        while (reader.Read())
        {
            if(reader.NodeType == XmlNodeType.Element && reader.Name == "Registration")
                counter++;
        }
        Console.WriteLine(counter);
        }

【讨论】:

  • 用上面的代码计算节点数可以正常工作,我怎样才能把xml分成几部分?
  • 所以如果你想在里面获取注册节点,如果把这个:XElement el = (XElement) XNode.ReadFrom(reader)
  • ~Hanumendra 这里的问题是您已经决定将 XML 分成几部分以使其更小是您前进的方向。可能不是。请更新您的问题以包含您编写的代码、它给出的错误,以及您的最终目标。看起来我们可能遇到了 XY 问题(请参阅此处meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。
猜你喜欢
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多