2009-07-01 3 views
6

У меня есть XML, который звучит так:XPath: Как выбрать узел по его атрибуту?

<?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; 

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

ответ

16

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

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

string xpath = string.Format("//color[@index='{0}']", percentage); 
+0

Почему 0 должно быть заключено в фигурные скобки? Я использую XPATH внутри Novell IDM, и @ index = 0 было бы достаточно. Что обозначают фигурные скобки? – geoffc

+3

его не является частью xpath, это часть String.Format, он будет заменяться 1-м параметром (т.е. процентом) –

8

Кстати, для тех из нас, кто не говорит по родной XPath, there are many online XPath "playgrounds" , что позволяет писать выражения XML и XPath и видеть результаты онлайн.

Всякий раз, когда я оказался в «XPath ад» Я обычно хожу в те playgrounds и попробовать различные комбинации, пока я не получу (необходимые) результаты, по какой-то причине он работает быстрее, чем писать C#/тестовую программу на Python или даже запустив эти bloated так называемые редакторы XML.

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