Jump to content

XML query or XML array help needed


surfnjunkie

Recommended Posts

Basically what I am trying to do is search an xml files elements. In this example I am searching for a books ISBN. If the ISBN is found I would like it to show the book title. If it is not found in any of the <isbn> element tags then I would like to be able to have it echo a message that the ISBN can not be found only 1 time.

 

Here is the sample xml:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
   <booklist>
      <book>
         <title>Cat in the hat</title>
         <image>cat.jpg</image>
         <isbn>12345</isbn>
         <link>http://amazon.com/book/cat_in_the_hat/</link>
      </book>
      <book>
         <title>Guerrila Marketing</title>
         <image>guerrilla.jpg</image>
         <isbn>54321</isbn>
         <link>http://amazon.com/book/guerrilla/</link>
      </book>
      <book>
         <title>The 48 Laws of Power</title>
         <image>power.jpg</image>
         <isbn>86543</isbn>
         <link>http://amazon.com/book/48_Laws_of_Power</link>
      </book>
   </booklist>
</catalog>

Here is the code:

<?php
// Will use simplexml to load xml file
$xml = simplexml_load_file('booklist.xml');

// Will search the isbn 12345
$isbnSearch = "54321";

foreach($xml->booklist->book as $book){
   if($book->isbn == $isbnSearch)
      echo "Your book is: " . $book->title . "<br>";
      // would like it to stop here if <isbn> and $isbnSearch match
   
   // if no <isbn> elements match $isbnSearch
   if($book->isbn != $isbnSearch)
      // would like it to echo 1 time and not for each isbn.
      echo "Your book with ISBN:" . $isbnSearch . " could not be found<br>";
}

?>

 

I have tried a few different things, but I keep hitting a wall. I tried setting up the xml into an array, but I couldn't get that quite right. If anyone can get me pointed in a better direction any help would be greatly appreciated.

 

Link to comment
Share on other sites

Hi. You are using the old PHP4 XML functions. Try the newer ones:

 

http://uk.php.net/manual/en/book.dom.php

 

An example:

 

$doc = new DOMDocument;
$doc->Load( 'file.xml' );

// Create an XPath object
$xpath = new DOMXPath( $doc );

//Query the document
$query = '//isbn[text()=12345]';
$entries = $xpath->query( $query );

if( $enteries->length > 0 )
{
echo $entries->item( 0 )->nodeValue;
}
else
echo "no ISBN found\n";

 

This uses XPath. It's a query language for XML. You can get some schooling on it at w3schools

Link to comment
Share on other sites

I figured it out, and was able to get the script to do what I wanted it to do. I thought I would post my solution.

<?php
$mySearch = 0;
$isbnSearch = "54321";
$xml = simplexml_load_file('booklist.xml');

foreach($xml->booklist->book as $book){
if($book->isbn == $isbnSearch){
	$title = $book->title;
	$mySearch = 1;
}
}

if($mySearch == 1){
echo "We Found your Book" . $title;
}
else {
echo "Sorry we could not find your book" . $isbnSearch;
}
?>

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.