Предположим, у меня есть xml вот так:
<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>
И я хочу выбрать узлы Product, которые имеют подузел 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, но я не верю, что это повлияет на ответ)