在C#中将大型XML读入不同节点类型的有效方法

时间:2016-11-07 01:11:08

标签: c# xml dom xmldocument xmlreader

我是C#的新手。我有一个相对较大的XML文件(28MB),我试图根据其内容将其子树解析为几种不同的类型。从本质上讲,我有6900多个Content节点,所有这些节点都需要被查询以确定它们的类型。

<Collections>
    <Content>..</Content>
    <Content>..</Content>
    <Content>..</Content>
    ...
</Collections>

对于每个Content节点,其下面的各种节点可以具有3种不同模式中的1种。我必须查看节点以确定我正在查看的对象的模式/类型。

所以想象一下Content节点中有大约100个子节点,第14个节点(在一种情况下)中有一个URL,表明它是&#34;类型1&#34; 并且应该将字段1,2,3,... 17,28,47和58写入DB。

另一种类型具有指示性元素对(让我们说元素3和58)并且表示它是&#34;类型2&#34; 并且应该具有不同的集合写入DB的元素。

等等......

从那里,我将对象映射到CMS / DB,并将各种数据位连接到该系统中的字段,并将相关元素的数据写入数据库。

由于源文件很大,我希望能够有效地从更大的文件中提取子树,压缩它们(确定它们的类型),然后将重要数据(映射它们)传送到数据库。

我是否必须以某种方式存储值并在我存储它们之后决定它是什么类型的对象?

我正在努力使用XmlReader的前向唯一方法以及使用基于DOM的方法的简易性。

感谢您的建议。

===编辑==== 谢谢评论者。 Content节点内部的结构将包含3个模式中的1个。每种类型大约有100个节点,所以为了便于阅读,我没有费心去粘贴它们。我确实尝试过以上澄清。

1 个答案:

答案 0 :(得分:0)

对于大文件,您必须使用xmlreader。我更喜欢使用xmlreeader和xml linq的组合。请尝试以下方法:

Dim n, strPost
dashCount = len(urlPost)-len(replace(urlPost,"-","")) 
n=dashCount
thisURL=split(urlPost,"-")
strPost=replace(thisURL(n),".html","")
response.write(strPost)