2009-07-01 18 views
6

Mam XML, który wygląda tak:XPath: Jak wybrać węzeł według jego atrybutu?

<?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> 
    [..] 

Próbuję wybrać węzeł o indeksie:

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; 

Próbowałem też komentowanym wersje, ale nie zwraca żadnych wynik. Wszelkie sugestie?

Odpowiedz

16

Zamiast tego użyj //color[@index='{0}']. Znak @ oznacza "atrybut".

Zauważam, że używasz dosłownego ciągu literowego przy okazji - znak @ na rozpoczyna ciągu znaków. W tym przypadku nie ma potrzeby - nie ma żadnych odwróconych ukośników w łańcuchu, a to nie jest wieloliniowy. Nie musisz też jednoznacznie dzwonić pod numer ToString pod numerem percentage - zostanie on automatycznie przekonwertowany.

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

Dlaczego 0 należy ująć w nawiasy klamrowe? Używam XPATH wewnątrz Novell IDM, a @ index = 0 byłoby tam wystarczające. Co oznaczają nawiasy klamrowe? – geoffc

+3

nie jest częścią xpath, jest częścią String.Format, zostanie zastąpiony pierwszym parametrem (czyli procentem) –

8

BTW, dla tych z nas, którzy nie zna ojczystego XPath, there are many online XPath "playgrounds" które pozwalają napisać wyrażenie XML i XPath i zobaczyć wyniki w Internecie.

Kiedy znalazłem się w „XPath piekła” I zwykle do tych playgrounds i próbować różnych kombinacji, aż dostanę moje (potrzebne) wyniki, z jakiegoś powodu, że działa szybciej niż pisanie C#/programu testowego Python lub nawet uruchamianie tych bloated tak zwanych edytorów XML.

Powiązane problemy