2010-11-08 2 views
1

У меня есть GridView населенного из файла XML, который имеет следующую структуру:asp.net XPath: выбрать только определенные атрибуты

<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, он показывает (правильно) сетку, как это:

имени идентификатора страница

1 дом default.aspx

2 содержание content.aspx

3 пользователя user.aspx3 пользователя user.aspx

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

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

  1. меню/пункт @ имя
  2. меню/@ имя
  3. // @ имя

но не работает

+0

насчет меню/пункт/@ имя? – codymanix

+0

Хороший вопрос, +1. См. Мой ответ для объяснения проблемы и полного решения. :) –

+0

Я думаю, что это не вопрос XPath, а вопрос MS Databinding. Из http://msdn.microsoft.com/en-us/library/aa479341.aspx: похоже, вам нужно установить атрибут 'AutoGenerateColumns =" ​​False "' элемента asp: GridView', а затем использовать 'Columns' и 'asp: BoundField'. – 2010-11-08 14:16:21

ответ

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

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

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

  1. меню/пункт @ имя
  2. меню/@ имя
  3. // @ имя
  1. синтаксически недействителен: locat ионные ступени должны начинаться с символа / и не должно быть / символ между item и @name.

  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 
+0

про xml: Конечно, он не очень хорошо сформирован, так как я записываю его с нуля, он на самом деле находится в моем проекте (xml еще сложнее, я упоминаю только упрощенную версию). Спасибо в любом случае, я попробую эти запросы, и я дам вам знать;) – balanza

Смежные вопросы