0

我一直在使用 Linq to XML 和通过 foreach 循环解析 XML 解析器。

该程序可以运行,但是速度很慢,因为我有 2 个根,里面有很多元素,并且这两个根的元素可以相关。(文件不大,从 1Mb 到 5Mb)。

所以,澄清一下,我在 .xml 文件中有根<Datas><Symbols>里面的元素,通过每个子元素与元素<Symbols>相关,如下:<Datas><Symbol><Type>

<Datas>
     <Data>
        <Name>**SymbolType_1**</Name> // (As you can see, <Name> = <Type> of the <Symbol>)
        <Type>DataType1</Type>
            <Subitem>
                <Name>SubitemName1</Name>
                <Type>SubitemType1</Type>
            </Subitem>
            <Subitem>
                <Name>SubitemName1</Name>
                <Type>SubitemType1</Type>
            </Subitem>
     </Data>
     <Data>
        <Name>**SymbolType_2**</Name>
            <Subitem>
                <Name>SubitemName1</Name>
                <Type>SubitemType1</Type>
            </Subitem>
            <Subitem>
                <Name>SubitemName1</Name>
                <Type>SubitemType1</Type>
            </Subitem>
     </Data>
     [...]
</Datas>

<Symbols>
     <Symbol>
         <Name>SymbolName_1</Name>
         <Type>**SymbolType_1**</Type>
     </Symbol>
     <Symbol>
         <Name>SymbolName_1</Name>
         <Type>**SymbolType_1**</Type>
     </Symbol>
     [...]
</Symbols>

因此,也有可能一些<Subitem> <Type>连接到另一个<Data>,创建一个由 10 个元素组成的结构。

我现在要做的是使用foreach循环获取 each<Symbol>并应用方法来查看 each<Data>及其各自的<Subitem>子级。

由于我是从 C# 开始的,所以我想知道将 all 和两个或三个不同的文件存储在列表中而不是文件中是否是<Symbol>一个好主意<Data><Subitem><List>

<Symbols>此外,拆分“区域”并使用多个 foreach 循环同时负责解析每个区域是否明智(并且可能) ?

最后,我想知道是否可以存储 each 的位置<Data>,所以我不需要从 root 开始解析<Datas>

非常感谢。

4

1 回答 1

1

您可能应该使用 Dictionary 来存储每个项目;IE

var symbols = new Dictionary<string, Symbol>();
var datas = new Dictionary<string, Data>();

然后在启动时加载它们;使用列表意味着您(可能)必须遍历整个集合才能找到正确的项目;使用字典,您将能够通过键直接访问它。

于 2013-11-14T14:07:39.447 回答