複数の子要素に基づいて個別の要素を選択するには、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 に制限されています) を使用して、異なる要素のみを選択する必要があり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>
何か案は?