• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 295
  • Last Modified:

Filter Results from XML in PHP by Attribute

For the life of me I cant figure out how to do this simple thing, new to dealing with xml in php.

I am getting an xml from the discogs api and would like to filter my results by the attribute "type" found in the release part of the xml snippet below.

The xml has types "main" "remix" etc in it for the release field. I would like to build loop the array with ONLY the releases that are of type "main". The php pertinent to the release array is below in the code area.

I am trying all i can with stuff like $type = $rel->item(0)->getAttribute("type"); and then an if in the loop, but it's failing. arg.

Thank you for any assistance!
// the structure of the xml I am getting
 
<resp stat="ok" version="1.0" requests="1"> 
  <artist>
    <releases>
      <release id="63114" status="Accepted" type="Main">
        <title></title>  
        <format></format>  
        <label></label>  
        <year></year>
       <release id="63114" status="Accepted" type="Remix">
        <title></title>  
        <format></format>  
        <label></label>  
        <year></year>    
      </release>  
     </releases>  
   </artist>  
</resp>  
 
// the php I am using to build an array, I want only releases with type "main"
 
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->loadXML($response);
$rel = $doc->getElementsByTagName("release");
 
foreach ($rel as $release)
{
    $title = $release->getElementsByTagName("title")->item(0)->nodeValue;
    $format = $release->getElementsByTagName("format")->item(0)->nodeValue;
    $label = $release->getElementsByTagName("label")->item(0)->nodeValue;
    $year = $release->getElementsByTagName("year")->item(0)->nodeValue;
    
    $releases[$title] = array ("title" => $title,
                           "format" => $format,
                           "label" => $label,
                           "year" => $year,
                             );
}

Open in new window

0
aiwazz
Asked:
aiwazz
1 Solution
 
aiwazzAuthor Commented:
I am dork. solved with adding below in foreach and if in output loop.
$type = $release->getAttribute("type");

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: C++ 11 Fundamentals

This course will introduce you to C++ 11 and teach you about syntax fundamentals.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now