asp.net xpath:只选择某些属性

时间:2010-11-08 12:03:01

标签: asp.net xpath attributes

我有一个从xml文件填充的GridView,它具有以下结构:

<menu>
  <item id="1" name="home" page="default.aspx">
     *{...some stuff...}*
  <item>
  <item id="2" name="content" page="content.aspx">
     *{...some stuff...}*
  <item>
  <item id="3" name="user" page="user.aspx">
     *{...some stuff...}*
  <item>
<menu>

你可以认为,这是我申请的菜单。

如果我只是将该文件关联到xmldatasource然后关联到GridView,它会(正确地)显示这样的网格:

  

ID名称页

     

1 home default.aspx

     

2内容content.aspx

     

3个用户user.aspx3用户user.aspx

如何将xPath查询设置为仅显示名称属性/字段?

我试过那些:

  1. menu / item @ name
  2. menu / @ name
  3. // @名称
  4. 但没有效果

1 个答案:

答案 0 :(得分:0)

  

我有一个填充的GridView   xml文件,包含以下内容   结构:

<menu> 
  <item id="1" name="home" page="default.aspx"> 
     *{...some stuff...}* 
  <item> 
  <item id="2" name="content" page="content.aspx"> 
     *{...some stuff...}* 
  <item> 
  <item id="3" name="user" page="user.aspx"> 
     *{...some stuff...}* 
  <item> 
<menu>

这不是格式正确的XML文件 - 结尾标记必须包含sintax </tag>,并且上述文本中根本没有结束标记。

  

如何仅将xPath查询设置为   显示名称属性/字段?

     
    

我试过那些:

  
     
      
  1. menu / item @ name
  2.   
  3. menu / @ name
  4.   
  5. // @名称
  6.   
  1. 在语法上无效:位置步骤必须以/字符开头,/item之间没有@name个字符。

    < / LI>
  2. 在语法上有效,但要求选择作为当前节点的子元素的所有name元素的所有menu属性。很遗憾,menu没有name属性。

  3. 应该选择节点,但鉴于上面的文字根本不是格式良好的XML文档,这就解释了否定的结果。此外,这将选择整个文档中的所有name属性,关于它们所在的元素 - 这不完全是您想要的,无论在这种类型的良好文档中这可能会选择您的节点想。

  4. <强>解决方案

    第1步:更正您的XML文档:

    <menu>
      <item id="1" name="home" page="default.aspx">
         *{...some stuff...}*
      </item>
      <item id="2" name="content" page="content.aspx">
         *{...some stuff...}*
      </item>
      <item id="3" name="user" page="user.aspx">
         *{...some stuff...}*
      </item>
    </menu>
    

    Step2 :使用以下XPath表达式之一(还有更多会选择所需节点):

    /menu/item/@name
    

    /*/item/@name
    

    /*/*/@name
    

    //@name