C#Linq to XML,当兄弟拥有数据时删除父母和孩子

时间:2017-08-08 11:24:13

标签: c# xml linq linq-to-xml

我不,如果这有意义的话。但我有一个非常大的XML文件。如果我的兄弟姐妹满足和条件,我想删除所有的孩子和父母。

因此,每当我的节点<Periode> <gyldigTil>拥有数据且不为空时,请从我的xml文件中删除其父级和子级。每次节点为空时,请保留父子节点和兄弟节点。

这是我的Linq C#

string file = Server.MapPath("ResponseCvrXML/" + "24347214" + ".xml");

string empty = " ";
XDocument xd = XDocument.Load(file);
xd.Root.Element("hits").Elements("_source").ToList()
    .ForEach(x =>
    {
        var name = x.Descendants("periode").First();
        if (name.Element("gyldigTil").Value == empty) {
        }
        else
        {
            x.Remove();
        }

    });


xd.Save(Server.MapPath("ResponseCvrXML/" + "24347214" + ".xml"));

和我的XML文件

 <Root>
  <took>24</took>
  <timed_out>false</timed_out>
  <_shards>
    <total>6</total>
    <successful>6</successful>
    <failed>0</failed>
  </_shards>
  <hits>
    <total>1</total>
    <max_score>17.372461</max_score>
    <hits>
      <_index>cvr-permanent-prod-20170205</_index>
      <_type>virksomhed</_type>
      <_id>4001115172</_id>
      <_score>17.372461</_score>
      <_source>
        <Vrvirksomhed>
      <cvrNummer>24347214</cvrNummer>
      <regNummer>
        <regnummer>A/S42018</regnummer>
        <periode>
          <gyldigFra>1969-09-29</gyldigFra>
          <gyldigTil>1999-10-18</gyldigTil>
        </periode>
        <sidstOpdateret>2015-02-10T00:00:00+01:00</sidstOpdateret>
      </regNummer>
      <brancheAnsvarskode>0</brancheAnsvarskode>
      <reklamebeskyttet>true</reklamebeskyttet>
      <navne>
        <navn>RIBO VINDUER A/S</navn>
        <periode>
          <gyldigFra>1969-09-29</gyldigFra>
          <gyldigTil>1992-03-27</gyldigTil>
        </periode>
        <sidstOpdateret>2015-03-19T00:00:00+01:00</sidstOpdateret>
      </navne>
      <navne>
        <navn>VELFAC INTERNATIONAL A/S</navn>
        <periode>
          <gyldigFra>1992-03-28</gyldigFra>
          <gyldigTil>1995-01-17</gyldigTil>
        </periode>
        <sidstOpdateret>2015-03-19T00:00:00+01:00</sidstOpdateret>
      </navne>

      <binavne>
        <navn>VELFAC INTERNATIONAL A/S</navn>
        <periode>
          <gyldigFra>1969-09-29</gyldigFra>
          <gyldigTil>1992-03-27</gyldigTil>
        </periode>
        <sidstOpdateret>2015-02-10T00:00:00+01:00</sidstOpdateret>
      </binavne>

      <binavne>
        <navn>VELFAC INTERNATIONAL A/S</navn>
        <periode>
          <gyldigFra>1969-09-29</gyldigFra>
          <gyldigTil />
        </periode>
        <sidstOpdateret>2015-02-10T00:00:00+01:00</sidstOpdateret>
      </binavne>
      <beliggenhedsadresse>
        <landekode>DK</landekode>
        <fritekst />
        <vejkode>6375</vejkode>
        <kommune>
          <kommuneKode>667</kommuneKode>
          <kommuneNavn>RINGKØBING</kommuneNavn>
          <periode>
            <gyldigFra />
            <gyldigTil>2006-12-31</gyldigTil>
          </periode>
          <sidstOpdateret>1999-10-15T00:00:00+02:00</sidstOpdateret>
        </kommune>
        <husnummerFra>5</husnummerFra>

        <vejnavn>Ribovej</vejnavn>
        <bynavn>Rindum</bynavn>
        <postnummer>6950</postnummer>
        <postdistrikt>Ringkøbing</postdistrikt>
        <periode>
          <gyldigFra>1969-09-29</gyldigFra>
          <gyldigTil>2006-12-31</gyldigTil>
        </periode>
        <sidstOpdateret>2013-11-22T22:40:23+01:00</sidstOpdateret>
      </beliggenhedsadresse>
      <beliggenhedsadresse>
        <landekode>DK</landekode>
        <fritekst />
        <vejkode>1605</vejkode>
        <kommune>
          <kommuneKode>760</kommuneKode>
          <kommuneNavn>RINGKØBING-SKJERN</kommuneNavn>
          <periode>
            <gyldigFra>2007-01-01</gyldigFra>
            <gyldigTil />
          </periode>
          <sidstOpdateret>2006-11-13T00:00:00+01:00</sidstOpdateret>
        </kommune>
        <husnummerFra>5</husnummerFra>
        <adresseId />
        <sidstValideret />
        <husnummerTil />
        <bogstavFra />
        <bogstavTil />
        <etage />
        <sidedoer />
        <conavn />
        <postboks />
        <vejnavn>Ribovej</vejnavn>
        <bynavn>Rindum</bynavn>
        <postnummer>6950</postnummer>
        <postdistrikt>Ringkøbing</postdistrikt>
        <periode>
          <gyldigFra>2007-01-01</gyldigFra>
          <gyldigTil>2011-05-31</gyldigTil>
        </periode>
        <sidstOpdateret>2006-12-28T13:37:26+01:00</sidstOpdateret>
      </beliggenhedsadresse>
      <beliggenhedsadresse>
        <landekode>DK</landekode>
        <fritekst />
        <vejkode>1142</vejkode>
        <kommune>
          <kommuneKode>615</kommuneKode>
          <kommuneNavn>HORSENS</kommuneNavn>
          <periode>
            <gyldigFra>2007-01-01</gyldigFra>
            <gyldigTil />
          </periode>
          <sidstOpdateret>2006-11-13T00:00:00+01:00</sidstOpdateret>
        </kommune>
        <husnummerFra>23</husnummerFra>
        <adresseId>0b29b248-c194-4363-b687-c774c93c06f5</adresseId>
        <sidstValideret>2017-05-12T11:06:28.712+02:00</sidstValideret>
        <husnummerTil />
        <bogstavFra />
        <bogstavTil />
        <etage />
        <sidedoer />
        <conavn />
        <postboks />
        <vejnavn>Bygholm Søpark</vejnavn>
        <bynavn />
        <postnummer>8700</postnummer>
        <postdistrikt>Horsens</postdistrikt>
        <periode>
          <gyldigFra>2011-06-01</gyldigFra>
          <gyldigTil />
        </periode>
        <sidstOpdateret>2013-06-26T19:32:22+02:00</sidstOpdateret>
      </beliggenhedsadresse>
      <telefonNummer>
        <kontaktoplysning>96755200</kontaktoplysning>
        <hemmelig>false</hemmelig>
        <periode>
          <gyldigFra>2002-06-21</gyldigFra>
          <gyldigTil />
        </periode>
        <sidstOpdateret>2002-06-25T19:34:17+02:00</sidstOpdateret>
      </telefonNummer>
      <telefaxNummer>
        <kontaktoplysning>96755201</kontaktoplysning>
        <hemmelig>false</hemmelig>
        <periode>
          <gyldigFra>2002-06-21</gyldigFra>
          <gyldigTil>2004-12-09</gyldigTil>
        </periode>
        <sidstOpdateret>2002-06-25T19:34:17+02:00</sidstOpdateret>
      </telefaxNummer>
      <elektroniskPost>
        <kontaktoplysning>velfac@velfac.dk</kontaktoplysning>
        <hemmelig>false</hemmelig>
        <periode>
          <gyldigFra>2000-01-23</gyldigFra>
          <gyldigTil>2000-11-01</gyldigTil>
        </periode>
        <sidstOpdateret>2000-04-01T14:51:22+02:00</sidstOpdateret>
      </elektroniskPost>
      <elektroniskPost>
        <kontaktoplysning>velfac@velfac.dk</kontaktoplysning>
        <hemmelig>false</hemmelig>
        <periode>
          <gyldigFra>2002-01-23</gyldigFra>
          <gyldigTil>2004-12-09</gyldigTil>
        </periode>
        <sidstOpdateret>2002-01-25T19:31:18+01:00</sidstOpdateret>
      </elektroniskPost>
      <obligatoriskEmail>
        <kontaktoplysning>salg@velfac.dk</kontaktoplysning>
        <hemmelig>true</hemmelig>
        <periode>
          <gyldigFra>2015-11-30</gyldigFra>
          <gyldigTil />
        </periode>
        <sidstOpdateret>2015-11-30T15:45:31+01:00</sidstOpdateret>
      </obligatoriskEmail>
      <livsforloeb>
        <periode>
          <gyldigFra>1969-09-29</gyldigFra>
          <gyldigTil />
        </periode>
        <sidstOpdateret>1999-10-16T19:50:10+02:00</sidstOpdateret>
      </livsforloeb>
      <hovedbranche>
        <branchekode>203020</branchekode>
        <branchetekst>Fremstilling af dele af træ til bygninger</branchetekst>
        <periode>
          <gyldigFra>1969-09-29</gyldigFra>
          <gyldigTil>2007-12-31</gyldigTil>
        </periode>
        <sidstOpdateret>2013-11-22T22:19:29+01:00</sidstOpdateret>
      </hovedbranche>
      <hovedbranche>
        <branchekode>162300</branchekode>
        <branchetekst>Fremstilling af bygningstømmer og snedkeriartikler i øvrigt</branchetekst>
        <periode>
          <gyldigFra>2008-01-01</gyldigFra>
          <gyldigTil>2012-12-31</gyldigTil>
        </periode>
        <sidstOpdateret>2015-11-23T13:46:28+01:00</sidstOpdateret>
      </hovedbranche>
      <hovedbranche>
        <branchekode>467310</branchekode>
        <branchetekst>Engroshandel med træ, trælast og byggematerialer</branchetekst>
        <periode>
          <gyldigFra>2013-01-01</gyldigFra>
          <gyldigTil />
        </periode>
        <sidstOpdateret>2015-11-23T13:46:28+01:00</sidstOpdateret>
      </hovedbranche>
      <bibranche1>
        <branchekode>515310</branchekode>
        <branchetekst>Engroshandel med træ, trælast og byggematerialer</branchetekst>
        <periode>
          <gyldigFra>1969-09-29</gyldigFra>
          <gyldigTil>2006-12-31</gyldigTil>
        </periode>
        <sidstOpdateret>2013-11-22T22:19:29+01:00</sidstOpdateret>
      </bibranche1>
      <bibranche1>
        <branchekode>682040</branchekode>
        <branchetekst>Udlejning af erhvervsejendomme</branchetekst>
        <periode>
          <gyldigFra>2014-01-01</gyldigFra>
          <gyldigTil>2014-01-01</gyldigTil>
        </periode>
        <sidstOpdateret>2015-11-20T15:14:41+01:00</sidstOpdateret>
      </bibranche1>
      <virksomhedsstatus>
        <status>NORMAL</status>
        <periode>
          <gyldigFra>1969-09-29</gyldigFra>
          <gyldigTil />
        </periode>
        <sidstOpdateret>2015-02-10T00:00:00+01:00</sidstOpdateret>
      </virksomhedsstatus>
      <virksomhedsform>
        <virksomhedsformkode>60</virksomhedsformkode>
        <kortBeskrivelse>A/S</kortBeskrivelse>
        <langBeskrivelse>Aktieselskab</langBeskrivelse>
        <ansvarligDataleverandoer>E&amp;S</ansvarligDataleverandoer>
        <periode>
          <gyldigFra>1969-09-29</gyldigFra>
          <gyldigTil />
        </periode>
        <sidstOpdateret>2013-11-22T21:57:52+01:00</sidstOpdateret>
      </virksomhedsform>   

1 个答案:

答案 0 :(得分:0)

更多LINQish方式,改变了对空白的检查。 这个人能做你想做的吗?

xd.Descendants("hits")
.Elements("_source")
.Descendants("periode")
.Elements("gyldigTil")
.Where(gt => gt.Nodes().Any())
.Select(gt => gt.Parent.Parent)
.Remove()