使用Linq有条件地删除XML文档的各个部分

时间:2011-05-04 16:46:25

标签: c# linq-to-xml

我如何使用Linq删除其元素<CCInfo>没有值0123的所有<CC>部分?

来源文件:

<Processing>
  <Mods>
    <ListMods>
      <Action>A</Action>
      <GetMoreInd></GetMoreInd>
      <QLDNameReq></QLDNameReq>
      <CCAry>
        <CCInfo>
          <CC>0123</CC>
          <Num>25</Num>
          <Cat></Cat>
          <DtRange></DtRange>
        </CCInfo>
        <CCInfo>
            <CC>456</CC>
            <Num>25</Num>
            <Cat></Cat>
            <DtRange></DtRange>
          </CCInfo>
          <CCInfo>
            <CC>0123</CC>
            <Num>99</Num>
            <Cat></Cat>
            <DtRange></DtRange>
          </CCInfo>
          <CCInfo>
            <CC>0123</CC>
            <Num>16</Num>
            <Cat></Cat>
            <DtRange></DtRange>
          </CCInfo>
          <CCInfo>
            <CC>xyz</CC>
            <Num>16</Num>
            <Cat></Cat>
            <DtRange></DtRange>
          </CCInfo>
        </CCAry>
      </ListMods>
  </Mods>
</Processing>

通缉输出

<Processing>
  <Mods>
    <ListMods>
      <Action>A</Action>
      <GetMoreInd></GetMoreInd>
      <QLDNameReq></QLDNameReq>
      <CCAry>
        <CCInfo>
          <CC>0123</CC>
          <Num>25</Num>
          <Cat></Cat>
          <DtRange></DtRange>
        </CCInfo>
          <CCInfo>
            <CC>0123</CC>
            <Num>99</Num>
            <Cat></Cat>
            <DtRange></DtRange>
          </CCInfo>
          <CCInfo>
            <CC>0123</CC>
            <Num>16</Num>
            <Cat></Cat>
            <DtRange></DtRange>
          </CCInfo>
        </CCAry>
      </ListMods>
  </Mods>
</Processing>

感谢

1 个答案:

答案 0 :(得分:4)

查询CCInfo个节点,将CC元素的值与您想要的值进行比较,然后调用XNode.Remove method

var query = xml.Descendants("CCInfo")
               .Where(e => e.Element("CC").Value != "0123");
query.Remove();
Console.WriteLine(xml);