Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Implementing condition in XPath [duplicate]

I have a XML file

<?xml version="1.0" encoding="UTF-8"?>
<xml>
  <events date="12/12/2010">
    <event>
      <title>JqueryEvent</title>
      <description>
        easily
      </description>
    </event>
  </events>
  <events date="14/12/2011">
    <event>
      <title>automatically onBlur</title>
      <description>
        when a date is selected. For an inline calendar, simply attach the datepicker to a div or span.
      </description>
    </event>
  </events>
</xml>

And I am using this Xpath to select the nodes

$xml   = simplexml_load_file($file);
$nodes = $xml->xpath('//xml/events');

It will select all the nodes.I want to select the nodes based on the date.

like image 342
Warrior Avatar asked Aug 10 '10 10:08

Warrior


2 Answers

Specify the date in the xpath expression,

i.e.

$nodes = $xml->xpath('//xml/events[@date="14/12/2011"]');

would select only the last events-node in the example

like image 63
Ledhund Avatar answered Sep 25 '22 02:09

Ledhund


Use

$xml = simplexml_load_string($xml);
$nodes = $xml->xpath('//events[@date="14/12/2011"]');
print_r( $nodes );

to get the event node below the xml node with the specified date and

$xml = simplexml_load_string($xml);
$nodes = $xml->xpath('//xml/events[@date]');
print_r( $nodes );

to get all event below the xml node nodes having a date attribute. Likewise, use

$xml = simplexml_load_string($xml);
$nodes = $xml->xpath('//events[contains(@date, "2011")]');
print_r( $nodes );

to find all event nodes anywhere in the document with a date attribute containing the string "2011".

On a sidenote, you can use simplexml_load_file to load an XML file directly.

like image 26
Gordon Avatar answered Sep 24 '22 02:09

Gordon