1

This is what I've tried so far and it gives me a bunch of stuff I don't want (see bottom for browser output):

// transform to Simple XML $xml = new SimpleXMLElement($results); // find category names $xml = $xml->xpath('params/param/value/array/data/value/struct/member/value/string'); print_r($xml); 

This is the XML, I need to get all the categoryName nodes:

<?xml version="1.0"?> <methodResponse> <params> <param> <value> <array><data> <value><struct> <member><name>categoryId</name><value><string>7</string></value></member> <member><name>parentId</name><value><string>0</string></value></member> <member><name>description</name><value><string>@MyCat000egory</string></value></member> <member><name>categoryDescription</name><value><string></string></value></member> <member><name>categoryName</name><value><string>@MyCat000egory</string></value></member> <member><name>htmlUrl</name><value><string>http://en.webacceleration.net/?cat=7</string></value></member> <member><name>rssUrl</name><value><string>http://en.webacceleration.net/?feed=rss2&amp;amp;cat=7</string></value></member> </struct></value> <value><struct> <member><name>categoryId</name><value><string>6</string></value></member> <member><name>parentId</name><value><string>0</string></value></member> <member><name>description</name><value><string>this is the category</string></value></member> <member><name>categoryDescription</name><value><string></string></value></member> <member><name>categoryName</name><value><string>this is the category</string></value></member> <member><name>htmlUrl</name><value><string>http://en.webacceleration.net/?cat=6</string> </value></member> <member><name>rssUrl</name><value><string>http://en.webacceleration.net/?feed=rss2&amp;amp;cat=6</string></value></member> </struct></value> <value><struct> <member><name>categoryId</name><value><string>1</string></value></member> <member><name>parentId</name><value><string>0</string></value></member> <member><name>description</name><value><string>Uncategorized</string></value></member> <member><name>categoryDescription</name><value><string></string></value></member> <member><name>categoryName</name><value><string>Uncategorized</string></value></member> <member><name>htmlUrl</name><value><string>http://en.webacceleration.net/?cat=1</string></value></member> <member><name>rssUrl</name><value><string>http://en.webacceleration.net/?feed=rss2&amp;amp;cat=1</string></value></member> </struct></value> </data></array> </value> </param> </params> </methodResponse> 

And this is the browser output:

Array ( [0] => SimpleXMLElement Object ( [0] => 7 ) [1] => SimpleXMLElement Object ( [0] => 0 ) [2] => SimpleXMLElement Object ( [0] => @MyCat000egory ) [3] => SimpleXMLElement Object ( ) [4] => SimpleXMLElement Object ( [0] => @MyCat000egory ) [5] => SimpleXMLElement Object ( [0] => http://en.webacceleration.net/?cat=7 ) [6] => SimpleXMLElement Object ( [0] => http://en.webacceleration.net/?feed=rss2&cat=7 ) [7] => SimpleXMLElement Object ( [0] => 6 ) [8] => SimpleXMLElement Object ( [0] => 0 ) [9] => SimpleXMLElement Object ( [0] => this is the category ) [10] => SimpleXMLElement Object ( ) [11] => SimpleXMLElement Object ( [0] => this is the category ) [12] => SimpleXMLElement Object ( [0] => http://en.webacceleration.net/?cat=6 ) [13] => SimpleXMLElement Object ( [0] => http://en.webacceleration.net/?feed=rss2&cat=6 ) [14] => SimpleXMLElement Object ( [0] => 1 ) [15] => SimpleXMLElement Object ( [0] => 0 ) [16] => SimpleXMLElement Object ( [0] => Uncategorized ) [17] => SimpleXMLElement Object ( ) [18] => SimpleXMLElement Object ( [0] => Uncategorized ) [19] => SimpleXMLElement Object ( [0] => http://en.webacceleration.net/?cat=1 ) [20] => SimpleXMLElement Object ( [0] => http://en.webacceleration.net/?feed=rss2&cat=1 ) ) 
2
  • What have you tried? Commented Nov 16, 2012 at 1:21
  • 1
    I tried this $xml = $xml->xpath('params/param/value/array/data/value/struct/member/value/string'); Commented Nov 16, 2012 at 1:22

2 Answers 2

1

Use instead of simply member this: member[name="categoryName"]

$xml = $xml->xpath('params/param/value/array/data/value/struct/member[name="categoryName"]/value/string'); 
Sign up to request clarification or add additional context in comments.

Comments

1
$categories = $xml->xpath('//name[text()="categoryName"]/../value/string'); 

Use text()="categoryName" to target the <name> and /../ to retrieve its sibling node <value>.

Full breakdown:

  • //name[text()="categoryName"] All <name> nodes having text value of "categoryName"
  • /../ Parent node of the previous match
  • /value/string <string> node that is a child of <value> of the parent matched by /../

.

 var_dump($categories); array(3) { [0]=> object(SimpleXMLElement)#5 (1) { [0]=> string(14) "@MyCat000egory" } [1]=> object(SimpleXMLElement)#6 (1) { [0]=> string(20) "this is the category" } [2]=> object(SimpleXMLElement)#7 (1) { [0]=> string(13) "Uncategorized" } } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.