2

下面是示例 xml 。

<?xml version="1.0"?>
<Terms>  
   <Term Id="D7923D9888BF100482C2CB8225D5863E" Name="Television" IsPlaceholder="false" />  
   <Term Id="F25AF2D07E4E100484F5DF092526B43E" Name="General news" IsPlaceholder="false">
     <ChildTerms>
       <Term Id="04969DF089DA10048141D56C852D093E" Name="Bombings" IsPlaceholder="false" />
       <Term Id="0E8CF338896510048024D56C852D093E" Name="Protests and demonstrations" IsPlaceholder="false" />
       <Term Id="17956128897810048CE8D56C852D093E" Name="Law and order" IsPlaceholder="false">
     <ChildTerms>
       <Term Id="3EC37E763F534FDB8A10C63768DAD1B7" Name="Executions" IsPlaceholder="false" />
       <Term Id="78C99FE8829F100481B5DF092526B43E" Name="Trials" IsPlaceholder="false" />
       <Term Id="C72CC1E0883210048566AE2AC3A6923E" Name="Prison breaks" IsPlaceholder="false" />
       <Term Id="CD42D51088321004856EAE2AC3A6923E" Name="Prison riots" IsPlaceholder="false" />
    </ChildTerms>
   </Term>
   <Term Id="31711EC0894B10048983BA0A2B2CA13E" Name="Accidents and disasters" IsPlaceholder="false">
    <ChildTerms>
      <Term Id="2D777E23418C4A61AB869F88F0CC22B5" Name="Industrial accidents" IsPlaceholder="false">
        <ChildTerms>
          <Term Id="6EF1C84088321004850DAE2AC3A6923E" Name="Mining accidents" IsPlaceholder="false" />
          <Term Id="77A15F9213344CF8AEFBD6560C618C9A" Name="Oil spills" IsPlaceholder="false" />
        </ChildTerms>
      </Term>
      <Term Id="439E22A0894B100489C4BA0A2B2CA13E" Name="Structural failures" IsPlaceholder="false">
        <ChildTerms>
          <Term Id="513CDC30894B10048A8E87A309043C03" Name="Bridge collapses" IsPlaceholder="false" />
          <Term Id="513D0340894B10048A8E87A309043C03" Name="Building collapses" IsPlaceholder="false" />
        </ChildTerms>
      </Term>
      <Term Id="58AD538091C7100480A9A55C96277D3E" Name="Evacuations" IsPlaceholder="false" />
      <Term Id="6B5B04B0882F100480E6AE2AC3A6923E" Name="Fires" IsPlaceholder="false">
        <ChildTerms>
          <Term Id="69D001C8896410048EBBD56C852D093E" Name="Residential fires" IsPlaceholder="false" />
          <Term Id="6C61CA38882F10048FA88BB2970C7204" Name="Wildfires" IsPlaceholder="false" />
        </ChildTerms>
      </Term>
      <Term Id="6C633968882F10048FA88BB2970C7204" Name="Floods" IsPlaceholder="false" />
      <Term Id="7448DD4882A0100481DDDF092526B43E" Name="Natural disasters" IsPlaceholder="false">
        <ChildTerms>
          <Term Id="6C61CA38882F10048FA88BB2970C7204" Name="Wildfires" IsPlaceholder="false" />
          <Term Id="6C615120882F10048FA68BB2970C7204" Name="Earthquakes" IsPlaceholder="false" />
          <Term Id="6C618FA0882F10048FA78BB2970C7204" Name="Tsunamis" IsPlaceholder="false" />
          <Term Id="6C6281D0882F10048FA88BB2970C7204" Name="Droughts" IsPlaceholder="false" />
          <Term Id="6C62C050882F10048FA88BB2970C7204" Name="Landslides and mudslides" IsPlaceholder="false" />
          <Term Id="6C633968882F10048FA98BB2970C7204" Name="Avalanches" IsPlaceholder="false" />
          <Term Id="A6F2C1C887E110048A6E8BEAE5FD5C07" Name="Tornados" IsPlaceholder="false" />
          <Term Id="B4600998883010048C189528EB155503" Name="Volcanic eruptions" IsPlaceholder="false" />
          <Term Id="DC90FFA0686948409257760CC35E98EB" Name="Tropical cyclones" IsPlaceholder="false">
            <ChildTerms>
              **<Term Id="6C6377E8882F10048FAB8BB2970C7204" Name="Hurricanes" IsPlaceholder="false" />**
              <Term Id="A6F2C1C887E110048A6D8BEAE5FD5C07" Name="Tropical storms" IsPlaceholder="false" />
            </ChildTerms>
          </Term>
        </ChildTerms>
      </Term>
      <Term Id="B6503CF08830100482EFAE2AC3A6923E" Name="Power outages" IsPlaceholder="false" />
      <Term Id="CCC363A0882F10048140AE2AC3A6923E" Name="Explosions" IsPlaceholder="false" />
      <Term Id="E20E7174E0154782B8733D180A799D34" Name="Transportation accidents" IsPlaceholder="false">
        <ChildTerms>
          <Term Id="3C105048882F100489FD9528EB155503" Name="Automotive accidents" IsPlaceholder="false" />
          <Term Id="3C107758882F100489FE9528EB155503" Name="Maritime accidents" IsPlaceholder="false" />
          <Term Id="41687660882F10048A199528EB155503" Name="Plane crashes" IsPlaceholder="false" />
          <Term Id="6AA161B575F64C62993BC3E9CD82BB69" Name="Rail accidents" IsPlaceholder="false" />
        </ChildTerms>
      </Term>
    </ChildTerms>
  </Term>
  <Term Id="48612B807C2B4B93BBBACBF54F547AD5" Name="Crime" IsPlaceholder="false">
    <ChildTerms>
      <Term Id="13C6A480899B10048B9DD56C852D093E" Name="Violent crime" IsPlaceholder="false">
        <ChildTerms>
          <Term Id="5018B8F4DED948128561C5AF2144CA66" Name="Shootings" IsPlaceholder="false">
            <ChildTerms>
              <Term Id="312A72707E8510048A118087FC32D30C" Name="School shootings" IsPlaceholder="false" />
            </ChildTerms>
          </Term>
          <Term Id="92DD72A8899B10048F2CD56C852D093E" Name="Assassinations" IsPlaceholder="false" />
          <Term Id="C5A59C298A2A4A36A618EFB20DF09A3C" Name="Homicide" IsPlaceholder="false" />
          <Term Id="FCAF54924FA3415DA977901DDB1E2EA7" Name="Gang-related crime" IsPlaceholder="false" />
        </ChildTerms>
      </Term>
      <Term Id="CA356A4172C64D3FA631803BA6CCC074" Name="Arson" IsPlaceholder="false" />
      <Term Id="CD80007770234E6AA95991F7D3B0C737" Name="Hate crimes" IsPlaceholder="false" />
    </ChildTerms>
  </Term>
  <Term Id="5F7806EEC29A4884B038A26D799E9326" Name="Strikes" IsPlaceholder="false" />
  <Term Id="5FC806A87DF7100483EBDF092526B43E" Name="Weather" IsPlaceholder="false">
    <ChildTerms>
      <Term Id="A6F2C1C887E110048A6E8BEAE5FD5C07" Name="Tornados" IsPlaceholder="false" />
      <Term Id="88C2A7E08886100487FECB8225D5863E" Name="Storms" IsPlaceholder="false">
        <ChildTerms>
          <Term Id="DC90FFA0686948409257760CC35E98EB" Name="Tropical cyclones" IsPlaceholder="false">
            <ChildTerms>
              **<Term Id="6C6377E8882F10048FAB8BB2970C7204" Name="Hurricanes" IsPlaceholder="false" />**
              <Term Id="A6F2C1C887E110048A6D8BEAE5FD5C07" Name="Tropical storms" IsPlaceholder="false" />
            </ChildTerms>
          </Term>
          <Term Id="59143B3791444BF7BD11992B42B8EA2E" Name="Wind storms" IsPlaceholder="false" />
          <Term Id="A6F248B087E110048A6B8BEAE5FD5C07" Name="Blizzards" IsPlaceholder="false" />
          <Term Id="A6F2873087E110048A6C8BEAE5FD5C07" Name="Thunderstorms" IsPlaceholder="false" />
          <Term Id="A6F3004887E110048A6F8BEAE5FD5C07" Name="Ice storms" IsPlaceholder="false" />
        </ChildTerms>
      </Term>
    </ChildTerms>
  </Term>
  <Term Id="7CF243908830100481E9AE2AC3A6923E" Name="War and unrest" IsPlaceholder="false">
    <ChildTerms>
      <Term Id="3510D930896410048E5CD56C852D093E" Name="Genocides" IsPlaceholder="false" />
      <Term Id="535DB1708832100484DBAE2AC3A6923E" Name="Troop withdrawals" IsPlaceholder="false" />
      <Term Id="5FEF4190897910048240D56C852D093E" Name="Massacres" IsPlaceholder="false" />
      <Term Id="6BCC38A43C5C4BC196FB108112EAA6C1" Name="Civil wars" IsPlaceholder="false" />
      <Term Id="98C3B8C5D6AF41C296A3CA1E4C0977ED" Name="Terrorism" IsPlaceholder="false">
        <ChildTerms>
          <Term Id="D7F9E33889701004837FD56C852D093E" Name="Terrorist attacks" IsPlaceholder="false" />
        </ChildTerms>
      </Term>
      <Term Id="9BEC03A0883310048673AE2AC3A6923E" Name="Military occupations" IsPlaceholder="false" />
      <Term Id="B9779BC8896410048F4CD56C852D093E" Name="Troop deployments" IsPlaceholder="false" />
    </ChildTerms>
  </Term>
  <Term Id="877CB3C0899A10048ABBD56C852D093E" Name="Transportation" IsPlaceholder="false">
    <ChildTerms>
      <Term Id="E20E7174E0154782B8733D180A799D34" Name="Transportation accidents" IsPlaceholder="false">
        <ChildTerms>
          <Term Id="3C105048882F100489FD9528EB155503" Name="Automotive accidents" IsPlaceholder="false" />
          <Term Id="3C107758882F100489FE9528EB155503" Name="Maritime accidents" IsPlaceholder="false" />
          <Term Id="41687660882F10048A199528EB155503" Name="Plane crashes" IsPlaceholder="false" />
          <Term Id="6AA161B575F64C62993BC3E9CD82BB69" Name="Rail accidents" IsPlaceholder="false" />
        </ChildTerms>
      </Term>
      <Term Id="9031A908899A10048BAFCECE19677003" Name="Traffic" IsPlaceholder="false" />
      <Term Id="90321E38899A10048BAFCECE19677003" Name="Air travel disruptions" IsPlaceholder="false" />
      <Term Id="90321E38899A10048BB0CECE19677003" Name="Rail travel disruptions" IsPlaceholder="false" />
    </ChildTerms>
  </Term>
  <Term Id="9D48E670883110048405AE2AC3A6923E" Name="International incidents" IsPlaceholder="false" />
  <Term Id="A0433408883010048BE79528EB155503" Name="Riots" IsPlaceholder="false" />
  <Term Id="CAEFF3958DE64F4D989F5EF1209BD073" Name="Humanitarian crises" IsPlaceholder="false">
    <ChildTerms>
      <Term Id="463C2098896410048E93D56C852D093E" Name="Famine" IsPlaceholder="false" />
    </ChildTerms>
  </Term>
  <Term Id="CE211E3891B0100483C1A55C96277D3E" Name="Record setting events" IsPlaceholder="false" />
  <Term Id="DA6509F88971100486C5D56C852D093E" Name="Search and rescue efforts" IsPlaceholder="false" />
</ChildTerms>

如您所见,飓风有两个条目(请在元素之前找到**标记)我只想删除其中任何一个。我尝试使用Linq,但它正在涂鸦xml的结构。请帮帮我。

4

2 回答 2

3

删除所有重复项并保留一个的 LINQ 解决方案

XElement xml = XElement.Load("data.xml");

string toRemove ="Hurricanes";

//Find the Number of Duplicates
int duplicateCount=xml.Descendants("Term")
                      .GroupBy(xe => xe.Attribute("Name").Value)
                      .Where(x => x.Key == toRemove)
                      .Select<IGrouping<string, XElement>, int>(y => y.Count())
                      .First();

//Remove all duplicates but one
xml.Descendants("Term").Where(xe => xe.Attribute("Name").Value == toRemove)
                       .Take(duplicateCount-1)
                       .Remove();

xml.Save("moddata.xml");
于 2012-11-08T07:24:22.560 回答
1

我可能会尝试 XPath。您可以使用 XDocument 的 XPathSelectElements 方法获取具有“飓风”值的 Name 属性的元素列表:

http://msdn.microsoft.com/en-us/library/bb342176%28v=vs.90%29.aspx

使用 ToList 将该 IEnumerable 元素列表放入 IList 中,然后在每个节点上调用 Remove:

http://msdn.microsoft.com/en-us/library/system.xml.linq.xnode.remove.aspx

这应该从它们存在于 XML 树中的任何位置删除所有元素。

于 2012-11-08T05:49:44.400 回答