2017-02-16 7 views
1

У меня этот XML, и я пытаюсь получить все /root/ecommerce/cart/product, чей ребёнок-ребёнок отсутствует в значениях /root/ecommerce/promo/promobrands/promobrand/branduid.Есть ли способ получить узлы, дочернее значение которых не равно другой дочерней оси?

<root> 
    <ecommerce> 
     <cart> 
      <product> 
       <branduid>value1</branduid> 
      </product> 
      <product> 
       <branduid>value2</branduid> 
      </product> 
      <product> 
       <branduid>value3</branduid> 
      </product> 
      <product> 
       <branduid>value4</branduid> 
      </product> 
     </cart> 
     <promo> 
      <promobrands> 
       <promobrand> 
        <branduid>value1</branduid> 
       </promobrand> 
       <promobrand> 
        <branduid>value3</branduid> 
       </promobrand> 
      </promobrands> 
     </promo> 
    </ecommerce> 
</root> 

Так что я только получить /root/ecommerce/product узлы, чьи branduid значения value2 и value4. Есть ли способ в XPath получить этот результат?

ответ

1

Try ниже XPath выражения и дайте мне знать результат

//cart/product[branduid[not(text()=//promobrand/branduid/text())]] 
+0

Это сделало мой день, спасибо вам большое! :) – Chitarrista

0

Если вы используете XPath 2.0, ниже выражение является простым способом достижения:

//branduid except //promobrand/branduid

иначе ответ Андерссона является хорошо.