5

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.

Deduplicator
  • 44,692
  • 7
  • 66
  • 118
Warrior
  • 5,168
  • 12
  • 60
  • 87

2 Answers2

7

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

Ledhund
  • 1,228
  • 10
  • 24
4

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.

Gordon
  • 312,688
  • 75
  • 539
  • 559