0

これが私のXMLです:

<Tree CheckBoxes="True" CheckChildNodes="True" TriStateCheckBoxes="True" MultipleSelect="True" EnableAjaxSkinRendering="False" BorderStyle="Inset" Height="100%"  Width="99%" RenderMode="Lightweight">
<Node Text="Consumer" Value="79" Expanded="True" Checked="True" >
  <Node Text="BASIC" Value="7983" Expanded="True" Checked="True" >
    <Node Text="RED" Value="7983BL" Checked="True" >
      <Node Text="E17" Value="906268" Checked="True"  />
      <Node Text="W57" Value="906390" />
    </Node>
    <Node Text="BLUE" Value="7983CG" >
      <Node Text="T2T" Value="906359"  />
    </Node>
    <Node Text="GREEN" Value="7983GO" >
      <Node Text="VCR" Value="906386"  />
    </Node>
    <Node Text="WHITE" Value="7983GP" Checked="True" >
      <Node Text="2B3" Value="906246" Checked="True"  />
    </Node>
  </Node>
  <Node Text="ENHANCED" Value="7984" Checked="True" >
    <Node Text="PURPLE" Value="7984CN" Checked="True" >
      <Node Text="V8Q" Value="906588" Checked="True"  />
      <Node Text="V8R" Value="906589"  />
      <Node Text="V8S" Value="906590" Checked="True"  />
    </Node>
    <Node Text="ORANGE" Value="7984CV" >
      <Node Text="3A5" Value="906408"  />
    </Node>
  </Node>
</Node>

このXMLでは、子ノードの属性がChecked = "True"の場合、その親ノードにもChecked="True"があります。XPath式で、ノードレベルに関係なく、属性Checked="True"を持たないすべてのノードを除外する必要がありました。

ありがとう、ニシャント

4

2 に答える 2

0
XDocument xml = XDocument.Load(reader);
xml.Root.DescendantsAndSelf().Where(node =>
{
  try
  {
    return node.Attribute("Checked").Value.ToString() != "True";
  }
  catch
  {
    //no attribute @Checked 
    return true;
  }
}).Remove();
于 2013-02-26T03:30:36.540 に答える
0

それを考えると、「Checked」属性をまったく含まないノードを削除したかったので、はるかに高速な方法を見つけました:

XDocument xml = XDocument.Load(リーダー); xml.Root.DescendantsAndSelf().Where(node => node.Attribute("Checked") = null).Remove();

于 2013-03-01T19:11:17.450 に答える