我需要使用 XPath 来选择基于多个子元素的不同元素。
我有一些这样的 XML:
<Cars>
<Car>
<Make>SuperCar</Make>
<Year>2009</Year>
</Car>
<Car>
<Make>SuperCar</Make>
<Year>2010</Year>
</Car>
<Car>
<Make>AwesomeCar</Make>
<Year>2010</Year>
</Car>
<Car>
<Make>SuperCar</Make>
<Year>2009</Year>
</Car>
</Cars>
而且我需要使用 XPath(我仅限于 XPath 1.0)来仅选择不同的元素,其中 distinct 由Make
和定义Year
。
在上面的示例中,这意味着返回Car
除最后一个之外的所有对象(因为这是第一个的副本Car
)。
在典型情况下(即对象由单个键字段标识),我将使用与此类似的 XPath:
/*/Car[not(./Id/text()=following-sibling::Car/Id/text())]
但是,我不太清楚如何调整它以正确使用多个字段。
我考虑过这样的事情:
/*/Car[not(./Make/text()=following-sibling::Car/Make/text()
and ./Model/text()=following-sibling::Car/Model/text())]
但这会检查是否在Make
任何地方使用以及是否在Model
任何地方使用,而不能确保它们必须在同一个. 上使用Car
。例如,它错误地Car
从以下示例 XML 中排除了第一个:
<Cars>
<Car>
<Make>SuperCar</Make>
<Year>2009</Year>
</Car>
<Car>
<Make>SuperCar</Make>
<Year>2010</Year>
</Car>
<Car>
<Make>AwesomeCar</Make>
<Year>2009</Year>
</Car>
</Cars>
有任何想法吗?