0
votes

I am new to Xpath. I am facing a problem that I have to get a boolean response from Xpath, if an element does not contains any text then it should return false otherwise true. I have seen many examples and I don't have much time to learn Xpath expressions. Below is the Xml file.

<?xml version="1.0" encoding="UTF-8" ?>
<order id="1234" date="05/06/2013">
  <customer first_name="James" last_name="Rorrison">
    <email>[email protected]</email>
    <phoneNumber>+44 1234 1234</phoneNumber>
  </customer>
  <content>
    <order_line item="H2G2" quantity="1">
      <unit_price>23.5</unit_price>
    </order_line>
    <order_line item="Harry Potter" quantity="2">
      <unit_price></unit_price>//**I want false here**
    </order_line>
  </content>
  <credit_card number="1357" expiry_date="10/13" control_number="234" type="Visa" />
</order>

Could you point me the right direction to create xpath expression for this problem.

What I want is a expression(dummy expression) as below.

/order/content/order_line/unit_price[at this point I want to put a validation which will return true or false based on some check of isNull or notNull].

1
credit_card node also contains no text - do you expect this to return false too?Phil Blackburn
I did not notice that. But I can give you a sample of what I want. Let me edit the question.Anant666

1 Answers

1
votes

The following xpath will do this:

not(boolean(//*[not(text() or *)]))

but this xpath will also include the credit_card node since it to does not contain any text (the attributes are not text()).

if you also want to exclude node with attributes then use this..

not(boolean(//*[not(text() or * or @*)]))

Following your edit, you can do this..

/order/content/order_line/unit_price[not(text()]

It will return a list of nodes with no text and from there you can test against the count of nodes for your test.

or to return true/false..

not(boolean(/order/content/order_line/unit_price[not(text()]))