Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XPath:如何通过属性选择节点?_C#_Xml_Xpath - Fatal编程技术网

C# XPath:如何通过属性选择节点?

C# XPath:如何通过属性选择节点?,c#,xml,xpath,C#,Xml,Xpath,我有这样一个XML: <?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">#FF0

我有这样一个XML:

<?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>
  [..]
我也尝试了评论过的版本,但没有返回任何结果。
有什么建议吗?

改用
//color[@index='{0}']
。@符号表示“属性”

我注意到您使用的是一个逐字逐句的字符串文字——字符串开头的@符号。在这种情况下没有必要-字符串中没有任何反斜杠,并且不是多行。您也不需要在
percentage
上显式调用
ToString
——它将自动转换

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

顺便说一句,对于我们这些不会说本地XPath的人, 它允许您编写XML和XPath表达式并在线查看结果


每当我发现自己陷入“XPath地狱”时,我通常会去尝试各种组合,直到得到我(需要的)结果,因为某种原因,它比编写C#/Python测试程序甚至运行所谓的XML编辑器要快。

为什么0必须用大括号括起来?我在Novell IDM中使用XPATH,@index=0就足够了。大括号表示什么?它不是xpath的一部分,而是String.Format的一部分,它将替换为第一个参数(即百分比)
string xpath = string.Format("//color[@index='{0}']", percentage);