2009-07-01 17 views
6

Ho un XML che va in questo modo:XPath: come selezionare un nodo tramite il suo attributo?

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

sto cercando di selezionare un nodo da suo indice:

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; 

ho provato anche le versioni commentate, ma non restituisce alcun risultato. Qualche suggerimento?

risposta

16

Utilizzare invece //color[@index='{0}']. Il segno @ significa "attributo".

Si noti che si sta utilizzando letteralmente una stringa letterale letteralmente: il segno @ allo inizia della stringa. In questo caso non è necessario: non ci sono barre rovesciate nella stringa e non è multilinea. Non è inoltre necessario chiamare esplicitamente ToString su percentage - verrà convertito automaticamente.

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

Perché il 0 devono essere racchiuso tra parentesi graffe? Io uso XPATH all'interno di Novell IDM e @ index = 0 sarebbe stato sufficiente lì. Cosa indicano le parentesi graffe? – geoffc

+3

la sua non è una parte del XPath, è parte del String.Format, sarà sostituisce con il 1 ° param (cioè in percentuale) –

8

BTW, per quelli di noi che non parla XPath nativa, there are many online XPath "playgrounds" che consentono di scrivere l'espressione XML e XPath e vedere i risultati on-line.

Ogni volta che mi sono trovato in un "XPath inferno" Di solito vado a quelli playgrounds e provare diverse combinazioni fino a ottenere i miei risultati (necessario), per qualche motivo che funziona più veloce di scrivere C# programma di test/Python o anche eseguendo quelli bloated così chiamati editor XML.

Problemi correlati