2012-05-09 101 views
0

之间我有这样的XML文件中删除一个节点:XPath表达式:在

<Item Text="Reports" Navigateurl ="Reports/Default.aspx" Select="true"> 
    <Group> 
    <Item Text="Customers" NavigateUrl="Reports/Customers/Default.aspx" Select="true"> 
     <Group> 
     <Item Text="Customers" NavigateUrl="Reports/Customers/CustomerList.aspx" 
      Select="true" /> 
     <Item Text="Customer Products" 
     NavigateUrl="Reports/Customers/CustomersProducts.aspx" Select="true" /> 
     <Item Text="Customer Measurements" 
     NavigateUrl="Reports/Customers/CustomerLocationMeasurements.aspx" Select="true" /> 
     <Item Text="Customer Groups" NavigateUrl="Reports/Customers/CustomerGroups.aspx" 
     Select="true"/> 
     <Item Text="Customer Outages" NavigateUrl="Reports/Customers/CustomerOutages.aspx" 
     Select="true" /> 
     </Group> 
    </Item> 
    <Item Text="Rules" NavigateUrl="Reports/Rules/Default.aspx" Select="true" > 
     <Group> 
     <Item Text="Customer Product Rules" 
     NavigateUrl="Reports/Rules/CustomerProducts.aspx" Select="true"/> 
     <Item Text="Customer Product Rules Event Limits" 
      NavigateUrl="Reports/Rules/CustomerProductEventLimits.aspx" Select="true" /> 
     <Item Text="Customer Product Rules Curtailable Days/Hours" 
     NavigateUrl="Reports/Rules/CustomerProductCurtailableDaysHours.aspx" 
      Select="true" /> 
     </Group> 
    </Item> 
    </Group> 
    </Item> 

所以,当我使用这个XPath表达式,

  XmlDataSource XmlDataSource1 = new XmlDataSource(); 
     XmlDataSource1.DataFile = "~/Menu.xml"; 
     XmlDataSource1.XPath = "//Item[@Text ='Reports']/Group/Item     
            [@Select='true']  
     XmlDataSource1.DataBind(); 
     SiteMap1.DataSource = XmlDataSource1; 

我得到这样的输出:

  Customers 
      Group 
       Customer Pages 
      Rules 
      Group 
       Rules Pages 

但我不希望组标记显示在输出中。你可以让我知道这可以实现吗?

+0

那么,你想要显示什么? – Tomalak

+0

我只是希望组元素不出现在输出中 – Sayamima

回答

1

XPath是查询用于选择节点或从XML文档中提取其他数据的语言。因此它不能修改文档的结构 - 例如删除节点

这种类型的处理 - 称为转换,可以很容易地用XSLT完成,并且(不那么容易)用XQuery完成。

+0

在这种情况下,我可以使用LINQ to XML吗? – Sayamima

+0

而我不想实际删除它,但我可以写一个表达式,只从xml中获取项目元素,忽略组元素 – Sayamima

+0

@Nishanth:不,如果选择了一个item项目,它仍然会有一个“group”子项。你不能用XPath“删除”孩子。 –