使用XPath根据同一节点中的另一个属性来查找节点中属性的值?

问题描述:

我有一个xml文档构建得很差 - 而不是子节点,这些项目有多个属性。使用XPath根据同一节点中的另一个属性来查找节点中属性的值?

例如:

<makes> 
<option make="FORD" year_start="1950" year_end="2009" /> 
<option make="CHEVROLET" year_start="1965" year_end="2009" /> 
... 
</makes> 

我试图使用XPath来选择匹配某种属性的所有节点的其他属性的值。我使用基于先前选择的2 xml文档中的值填充3个asp下拉菜单。我正在使用.net/c#

例如: 对于具有值x的make属性的所有选项节点,查找year_start的值。

我想是这样的:

yearListData.XPath = string.Format("/makes/option[@year_start] and [@make={0}]", make); 

其中做出=前选择。显然,它没有工作。

有没有使用XPath来做到这一点的方法?

/makes/option[@year_start and @make="FORD"]/@year_start 

你可以用和/或[]内部条件相结合,然后询问属性。

+1

于断言的@year_start可能是矫枉过正,因为它不能返回没有按什么不存在,但它会给出正确的答案。 – 2009-10-05 21:28:02

+0

我把它留在那里,以便将表达式可以在谓词中组合起来。 – 2009-10-05 21:29:02

+0

这为我工作,但我仍然有问题;你能推荐一个好的.net/c#&xml资源吗? – 2009-10-06 13:05:50

/makes/option[@make='FORD']/@year_start 

...将让您在所有选项中找到所有year_start属性,其中make是“FORD”。如果存在一对一关系,则属性通常比子元素更可取 - 它们不需要详细的结束标记。

您也可以将linq转换为XML。

我不知道这是否会工作,但我认为你可以做到与类似:


string.Format("/makes/option[@make={0}]//@year_start",make); 
+0

你需要一些引号 – 2009-10-05 21:28:35