XPath: How to select a node by its attribute?

c#, xml, xpath

Solution

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 `ToString` on `percentage` - it will be converted automatically.

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

Problem

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?

Original source