XPath: как выбрать узел по его атрибуту?
у меня есть 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 ответов
использовать //color[@index='{0}']
вместо. Знак @ означает "атрибут".
Я отмечаю, что вы используете дословный строковый литерал кстати-знак @ в старт строки. В этом случае нет необходимости - у вас нет обратной косой черты в строке, и она не является многострочной. Вам также не нужно явно вызывать ToString
on percentage
- он будет преобразован автоматически.
string xpath = string.Format("//color[@index='{0}']", percentage);
кстати, для тех из нас, кто не говорит на родном XPath,есть много онлайн XPath "игровые площадки" это позволяет вам писать выражения XML и XPath и просматривать результаты в интернете.
всякий раз, когда я оказался в "XPath ад" Я обычно хожу в те детские площадки и попробуйте различные комбинации, пока я не получу свои (необходимые) результаты, по какой-то причине он работает быстрее, чем писать тестовую программу C# / Python или даже запускать их раздутый так называемые редакторы XML.