XPath visually

XPath visually

0 8710

XPath visually

XPath is one of important keys to understanding of XSLT. And at first time we usually looking for any information (better – places where we can play online) – how to get different values in branch of XML tree. In this article I`ll give you all important information and will show how to work with XPath in samples.

As example we have next source XML:

<?xml version="1.0"?>
<bookstore specialty="novel">
  <book style="autobiography">
    <author>
      <first-name>Joe</first-name>
      <last-name>Bob</last-name>
      <award>Trenton Literary Review Honorable Mention</award>
    </author>
    <price>12</price>
  </book>
  <book style="textbook">
    <author>
      <first-name>Mary</first-name>
      <last-name>Bob</last-name>
      <publication>Selected Short Stories of
        <first-name>Mary</first-name>
        <last-name>Bob</last-name>
      </publication>
    </author>
    <price>55</price>
  </book>
  <magazine style="glossy" frequency="monthly">
    <price>2.50</price>
    <subscription price="24" per="year"/>
  </magazine>
  <book style="novel" id="myfave">
    <author>
      <first-name>Toni</first-name>
      <last-name>Bob</last-name>
      <degree from="Trenton U">B.A.</degree>
      <degree from="Harvard">Ph.D.</degree>
      <award>Pulitzer</award>
      <publication>Still in Trenton</publication>
      <publication>Trenton Forever</publication>
    </author>
    <price intl="Canada" exchange="0.7">6.50</price>
    <excerpt>
      <p>It was a dark and stormy night.</p>
      <p>But then all nights in Trenton seem dark and
      stormy to someone who has gone through what
      <emph>I</emph> have.</p>
      <definition-list>
        <term>Trenton</term>
        <definition>misery</definition>
      </definition-list>
    </excerpt>
  </book>
</bookstore>

This is some bookstore listing

Here are list of rules which we can use in XPath:

  • Different levels in tree separate via / symbol. This example will return array with infos of all authors: bookstore/book/author
  • Access to attributes we can obtain via @ symbol. That example will return us price of magazine subscription: bookstore/magazine/subscription/@price
  • Inside [] we can use number value to tell which (by order) element will need to receive. This example will return us price of second book: bookstore/book[2]/price
  • Also, we can use subpaths in [] and use this as check, are necessary elements present in our tree or not. Example – get all books with style=novel: bookstore/book[@style=”novel”]
  • Another example – get all books with excerpts: bookstore/book[excerpt]
  • Another example – get all books if author have any awards: bookstore/book[author[award]]
  • Or – get all authors who have any awards: bookstore/book/author[award]
  • Or we can add some logic – get all books if author Don`t have awards: bookstore/book[author[not(award)]]
  • And last sample – get all books with price from 10 and 20: bookstore/book[price < 20 and price > 10]

Interesting, isn`t it? Now, how we can use that. In first sample – we will store some defined value into variable:

<xsl:variable name="magSubPrice" select="bookstore/magazine/subscription/@price"/>

Now we will walk through array of located elements:

<xsl:for-each select="bookstore/book/author">
    // do some actions with authors
</xsl:for-each>

And, here are one interesting service: http://xpath.me/ – where you will able to play with all our samples online. It will allow you to feel all this by self. Very nice and easy service.


Conclusion

I hope that today’s article will very useful for your projects. Will glad if this will help you in your work. Good luck!


NO COMMENTS

Leave a Reply