asp.net xpath: выбрать только определенные атрибуты - PullRequest
1 голос
/ 08 ноября 2010

У меня есть 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>

Как вы можете судить, это меню моего приложения.

Если я просто ассоциируюэтот файл в xmldatasource, а затем в GridView, он показывает (правильно) сетку, как это:

имя страницы ID

1 home default.aspx

2 content content.aspx

3 user user.aspx3 user user.aspx

Как настроить запрос xPath только для отображения атрибута / поля имени?

Я пробовал такие:

  1. menu / item @ name
  2. menu / @ name
  3. // @ name

но не сработало

1 Ответ

0 голосов
/ 08 ноября 2010

У меня есть 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 -- конечный тег должен иметь синтаксис </tag>, а в приведенном выше тексте нет конечных тегов вообще.

Как установить в запросе xPath только отображение атрибута / поля имени?

Я пробовал такие:

  1. menu / item @ name
  2. menu / @ name
  3. // @ name
  1. синтаксически недопустим: шаги местоположения должны начинаться с символа /, а между item и @name. * Нет символа /.1033 *

  2. синтаксически допустим, но просит выбрать все name атрибуты всех menu элементов, которые являются дочерними элементами текущего узла.К сожалению, menu не имеет атрибутов name.

  3. должны выбирать узлы, но, учитывая, что приведенный выше текст вовсе не является правильно сформированным XML-документом, это объясняет отрицательный результат,Кроме того, при этом выбираются все атрибуты name во всем документе, в зависимости от того, к какому элементу они относятся - это не совсем то, что вам нужно, независимо от того, что в правильно сформированном документе этого типа это может выбрать нужные вам узлы.

Решение :

Шаг 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...