2013-02-26 60 views
0

這裏是我的XML:什麼是XPATH表達式來選擇TreeView的所有檢查節點?

<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,如果有子節點具有屬性選中=「真」,那麼它的父節點本來還選中=「真」。我希望XPath表達式排除不具有屬性Checked =「True」的所有節點,而不管節點級別如何。

感謝, NISHANT

回答

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(); 
+0

那是什麼語言? – 2013-02-26 03:32:45

+0

@OscarMederos XQuery。 OP要求提供XPath表達式,但將其標記爲XQuery。 XPath不適合重建XML。 XSLT將是理想的。 – wst 2013-02-26 03:37:26

+0

好吧,只是問; – 2013-02-26 03:43:47

0

鑑於此,我想刪除不包含「經過」屬性在所有節點,我找到了更快的方法:

的XDocument XML = XDocument.Load(讀取器); xml.Root.DescendantsAndSelf()。其中​​(node => node.Attribute(「Checked」)= null).Remove();

相關問題