Вопрос по c#, xml – XPath: Как выбрать узел по его атрибуту?

7

У меня есть XML, который выглядит так:

<?xml version="1.0" encoding="utf-8" ?>
<colors>
  <color index = "0">#FF0000</color>
  <color index = "1">#FF0200</color>
  <color index = "2">#FF0300</color>
  <color index = "3">#FF0500</color>
  [..]

Я пытаюсь выбрать узел по его индексу:

XmlDocument ColorTable = new XmlDocument();
ColorTable.Load(HttpContext.Current.Server.MapPath("~/App_Data/ColorTable.xml"));
int percentage = 2;
string xpath = string.Format(@"//color[index={0}]", percentage.ToString());
//string xpath = string.Format(@"//color[index=""{0}""]", percentage.ToString());
//string xpath = string.Format(@"//color[index='{0}']", percentage.ToString());
var r = ColorTable.SelectSingleNode(xpath).Value;

Я пробовал также закомментированные версии, но это не дает никакого результата. Любое предложение

Ваш Ответ

2   ответа
17

//color[@index='{0}'] вместо. Знак @ означает «атрибут».

Кстати, кстати, вы используете дословный строковый литерал - знак @ наНачал строки. В этом нет необходимости - у вас нет обратной косой черты в строке, и она не многострочная. Вам также не нужно явно вызыватьToString наpercentage - конвертируется автоматически.

string xpath = string.Format("//color[@index='{0}']", percentage);
он не является частью xpath, он является частью String.Format, он будет заменен на 1-й параметр (т.е. процент) Shay Erlichmen
Почему 0 должен быть заключен в фигурные скобки? Я использую XPATH внутри Novell IDM, и @ index = 0 было бы достаточно там. Что обозначают фигурные скобки? geoffc
9

Есть много онлайн XPath "игровых площадок" которые позволяют вам писать выражения в формате XML и XPath и просматривать результаты в режиме онлайн.

Когда бы я ни оказался в "XPath ад "Я обычно хожу в тедетские площадк и пробовать различные комбинации, пока не получу свои (необходимые) результаты, по какой-то причине это работает быстрее, чем написание тестовой программы на C # / Python или даже запуск этих Раздутой так называемые редакторы XML.

Похожие вопросы