Eran Levi
Eran Levi

Reputation: 909

PHP DOM: getElementsByTagName Returns all nodes with this name (although I'm inside a specific tag)

Im looking for an answer for DAYS! and I haven't found any.. :( here is my XML sample:

    <?xml version="1.0" encoding="UTF-8"?>
    <Businesses>
    <Business NAME="Bus1">
    <DEAL ID="2">
    <title>My first Title</Title>
</DEAL>
    <DEAL ID="4">
    <title>My Second Title</Title>
</DEAL>
    </Business>
    <Business NAME="Bus2">
    <DEAL ID="2">
    <title>My 2nd Title</Title>
</DEAL>
    <DEAL ID="5">
    <title>My last Title</Title>
</DEAL>
    </Business>
    <Businesses>

How can i parse this xml one business by one?? Here is my code:

<?php 
  $doc = new domDocument();
  $doc->load("MyXML.xml"); //(The XML Above)
    $Businesses = $doc->documentElement;
    $ebus = $Businesses->childNodes;
    foreach ($ebus as $business) {

     if ($business instanceof domElement) {
     $busname=$business->getAttribute('NAME');
    $shelves = $Businesses->getElementsByTagName("DEAL"); //HERE IS THE PROBLEM

  foreach ($shelves as $deal) {

//Here i have all of the Businesses (I need to present only the first "NAME='Bus1'") for the first iteration! and so on..
}}}
?>

The issue is that "getElementsByTagName" bring all "DEAL" nodes althoug I'm inside foreach of the first business!!

I Tried: $shelves = $Businesses->childNodes; // But it's Not Correct

Thank you for your Help!!

Upvotes: 1

Views: 1367

Answers (1)

Esailija
Esailija

Reputation: 140228

You are calling it on $Businesses which is documentElement. You assigned it at the start:

$Businesses = $doc->documentElement;

Try this:

$shelves = $business->getElementsByTagName("DEAL");

Upvotes: 2

Related Questions