如何将此Linq写入XML Query以将值存储在内存中?

时间:2012-03-19 13:40:40

标签: c# linq-to-xml

<?xml version="1.0" encoding="utf-8" ?>
<SiteMap>
    <Site FacID="Default">
      <Rec0>
            <NumGeos>
                <RMin>0</RMin>
                <YMin>1</YMin>
                <YMax>4</YMax>
                <RMax>5</RMax>
            </NumGeos>
            <GeoAvg>
                <RMin>10</RMin>
                <YMin>20</YMin>
                <YMax>60</YMax>
                <RMax>70</RMax>
            </GeoAvg>
            <L1AGC>
                <RMin>2500</RMin>
                <YMin>2600</YMin>
                <YMax>3400</YMax>
                <RMax>3500</RMax>
            </L1AGC>
            <NumL1s>
                <RMin>0</RMin>
                <YMin>1</YMin>
                <YMax>14</YMax>
                <RMax>15</RMax>
            </NumL1s>
            <L1Avg>
                <RMin>10</RMin>
                <YMin>20</YMin>
                <YMax>60</YMax>
                <RMax>70</RMax>
            </L1Avg>
            <L2AGC>
                <RMin>2500</RMin>
                <YMin>2600</YMin>
                <YMax>3400</YMax>
                <RMax>3500</RMax>
            </L2AGC>
            <NumL2s>
                <RMin>0</RMin>
                <YMin>1</YMin>
                <YMax>14</YMax>
                <RMax>15</RMax>
            </NumL2s>
            <L2Avg>
                <RMin>10</RMin>
                <YMin>20</YMin>
                <YMax>60</YMax>
                <RMax>70</RMax>
            </L2Avg>
        </Rec0>
    </Site>
    <Site FacID="BET">
        <Rec1>
            <NumGeos>
                <RMin>0</RMin>
                <YMin>1</YMin>
                <YMax>4</YMax>
                <RMax>5</RMax>
            </NumGeos>
            <GeoAvg>
                <RMin>10</RMin>
                <YMin>20</YMin>
                <YMax>60</YMax>
                <RMax>70</RMax>
            </GeoAvg>
            <L1AGC>
                <RMin>2500</RMin>
                <YMin>2600</YMin>
                <YMax>3400</YMax>
                <RMax>3500</RMax>
            </L1AGC>
            <NumL1s>
                <RMin>0</RMin>
                <YMin>1</YMin>
                <YMax>14</YMax>
                <RMax>15</RMax>
            </NumL1s>
            <L1Avg>
                <RMin>10</RMin>
                <YMin>20</YMin>
                <YMax>60</YMax>
                <RMax>70</RMax>
            </L1Avg>
            <L2AGC>
                <RMin>2500</RMin>
                <YMin>2600</YMin>
                <YMax>3400</YMax>
                <RMax>3500</RMax>
            </L2AGC>
            <NumL2s>
                <RMin>0</RMin>
                <YMin>1</YMin>
                <YMax>14</YMax>
                <RMax>15</RMax>
            </NumL2s>
            <L2Avg>
                <RMin>10</RMin>
                <YMin>20</YMin>
                <YMax>60</YMax>
                <RMax>70</RMax>
            </L2Avg>
        </Rec1>
    </Site>
</SiteMap>

我试图存储上面xml文件中列出的值,以便我可以像这样引用它们:

int x = (Site["BET"].Rec1.GeoAvg.RMin == null 
      ? Site["Default"].Rec0.GeoAvg.RMin 
      : Site["BET"].Rec1.GeoAvg.RMin)

或至少与此类似的东西。任何人都知道一种简单(快速)的方法吗?非常感谢你的帮助!!!

2 个答案:

答案 0 :(得分:1)

主要部分是ToDicionary(),类似于

var sites = doc.Descendants("Site").ToDictionary(
        e => e.Attribute("FacID").Value, 
        e => new Site { Rec1 = new Rec1 { ... } } );

答案 1 :(得分:1)

好的,所以我没有尝试使用Linq来做这件事,而是使用了这个:

Generate C# class from XML

然后我只使用点表示法引用了新类中的元素。