Предположим, у меня есть XML следующим образом:Являются ли эти два стиля xpath логическими и эквивалентными?
<Products>
<Product name="Liquid Oxygen">
<Manufacturer name="Universal Exports" country="UK" />
</Product>
<Product name="Hydrazine">
<Manufacturer name="ACME Inc." country="USA" />
</Product>
<Product name="Gaseous Oxygen" obsolete="true">
<Manufacturer name="Universal Exports" country="UK" />
</Product>
<Product name="Liquid Nitrogen">
<Manufacturer name="Penguins R Us" country="Antarctica" />
</Product>
</Products>
И я хочу, чтобы выбрать узлы продукта, которые имеют Manufacturer
подузел с @country
из UK
, но не имеют @obsolete
из true
. Я могу сказать, либо
/Products/Product[Manufacturer/@country = 'UK' and not(@obsolete = 'true)]
или
/Products/Product[Manufacturer/@country = 'UK'][not(@obsolete = 'true')]
и оба получают меня узлы, которые я хочу.
Мой вопрос в том, есть ли какая-либо функциональная разница между этими двумя подходами к и-условиям? Есть ли ситуация, когда разные подходы могут дать разные результаты? (Я понимаю, что and
служит цели в более сложных условиях). Стилистически предпочтительнее другого?
(я использую C# и .NET 2.0, но я не верю, что будет иметь какое-либо отношение к ответу)