正在分析xml.具有关系的对象(一对多)

本文关键字:对象 一对多 有关系 xml | 更新日期: 2023-09-27 18:27:19

我有一个xml文件:

<?xml version='1.0' encoding='windows-1251' standalone='yes'?><XML>
  <Result>Ok</Result>
  <Error></Error>
  <Remark></Remark>
  <Data>
    <Theatres>
      <Theatre ID='1' ShowBusyPlaces='1'> // maybe more than one
        <Name><![CDATA[PlaceName]]></Name>
        <NameFull><![CDATA[PlaceName]]></NameFull>
        <Remark><![CDATA[]]></Remark>
        <Address><![CDATA[]]></Address>
        <Halls Count='3'>
          <Hall ID='1'>
            <Name><![CDATA[Redisson]]></Name>
            <Levels Count='1'> 
              <Level ID='1' Geometry='1'> // maybe more than one
                <Name><![CDATA[Radisson]]></Name>
              </Level>
            </Levels>
          </Hall>
          <Hall ID='3'>
            <Name><![CDATA[Test 2]]></Name>
            <Levels Count='0'></Levels>
          </Hall>
          <Hall ID='2'>
            <Name><![CDATA[тест]]></Name>
            <Levels Count='1'>
              <Level ID='4' Geometry='2'>
                <Name><![CDATA[ттт]]></Name>
              </Level>
            </Levels>
          </Hall>
        </Halls>
      </Theatre>
    </Theatres>
  </Data>
</XML>

我有两个类:BasePlaceHallPlan(一对多关系)

BasePlace:OID, Name, Address
HallPlan:OID, BasePlaceId, HallId, LevelId

例如,上面的结果必须是:

BasePlace table:
OID     Name         Address
1      PlaceName     
HallPlan table:
OID     BasePlaceId, HallId, LevelId
1          1           1       1
2          1           2       4
3          1           3      null

此查询返回仅填充BasePlace对象:

var places = from element in XDocument.Parse(xml).Descendants("Theatre")
                          select new BasePlace
                                     {
                                         OIDPremiera = (int) element.Attribute("ID"),
                                         Name = (string) element.Element("Name"),
                                         Address = (string) element.Element("Address"),
                                     };

如何正确填写HallPlan(包含所有字段以及与BasePlace的关系)?谢谢

正在分析xml.具有关系的对象(一对多)

它应该具有以下效果:

        var plans = from element in XDocument.Parse(xml).Descendants("Hall")
                    select new HallPlan
                    {
                        OIDHallPlan = (int) element.Attribute("ID"),
                        BPRef = (BasePlace) (from BasePlace1 in places
                                where (BasePlace1.OIDPremiera == (int)element.Parent.Parent.Attribute("ID"))
                                select BasePlace1).FirstOrDefault(),
                        // ...
                    };