2012-05-09 193 views
0

你好,我有一个xml文件,我希望没有它的一部分。所以,这是我的xml文件:写XPATH表达式

  <Item Text="Reports" Navigateurl ="Reports/Default.aspx"> 
    <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" /> 
     <Item Text="Customer Outages" 
      NavigateUrl="Reports/Customers/CustomerOutages.aspx" Select="true"/> 
     </Group> 
    </Item> 

要选择这部分我用这个表达式:

 XmlDataSource XmlDataSource1 = new XmlDataSource(); 
     XmlDataSource1.DataFile = "~/Menu.xml"; 
     XmlDataSource1.XPath = "//Item[@Text ='Customers']/Group"; 
     XmlDataSource1.DataBind(); 

其结果将是

 Group 
     Customers 
     CustomerProducts 
     .......... 

,但我想只有那些为其选择属性是真实的。但我一直无法想象如何去做。你能帮我么?

+0

'//项目[@Text = '客户'] [@选择= '真']'应做手段 – Kris

回答

0

这是正确的做法:

XmlDataSource1.XPath = "//Item[@Text ='Customers']/Group/Item[@Select = 'true']"; 
2

不知道我是否正确地记得 - 但我认为这是做到这一点的方法。

XmlDataSource1.XPath = "//Item[@Text ='Customers']/Group[/Item/@Select='true']"; 
+0

“// Item [@Text ='Customers']/Group/Item [@ Select ='true']”; 这工作........只是一点点修改....谢谢 – Sayamima

+0

Np ..并感谢您张贴正确的方式来做到这一点:)我不记得 – Sandbeck

0

由于XPATH是XPATH,我已经制定了在PHP中的例子,因为我没有一个C#编译器在我的Mac ATM得心应手。

路径声明"//Item[@Text ='Customers'][@Select='true']"结果:

Reports/Customers/Default.aspx 
Reports/Customers/CustomerList.aspx 

的示例代码:

<?php 

$xml = <<<XML 
<Item Text="Reports" Navigateurl ="Reports/Default.aspx"> 
    <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" /> 
       <Item Text="Customer Outages" NavigateUrl="Reports/Customers/CustomerOutages.aspx" Select="true"/> 
      </Group> 
     </Item> 
    </Group> 
</Item> 
XML; 

$doc = new DOMDocument(); 
$doc->loadXML($xml); 
$xpath = new DOMXPath($doc); 
$list = $xpath->query("//Item[@Text ='Customers'][@Select='true']"); 
foreach($list as $item) 
{ 
    printf("%s\n", $item->getAttribute('NavigateUrl')); 
}