I have an XML that goes like this:
<?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>
[..]
I’m trying to select a node by its index:
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;
I tried also the commented versions, but it does not return any result.
Any suggestion?
Use
//color[@index='{0}']instead. The @ sign means “attribute”.I note that you’re using a verbatim string literal by the way – the @ sign at the start of the string. There’s no need in this case – you don’t have any backslashes in the string, and it’s not multi-line. You also don’t need to explicitly call
ToStringonpercentage– it will be converted automatically.