2012-11-16 90 views
1

这是我到目前为止已经试过和它给了我一堆东西我不希望(看到浏览器输出,底部):如何解析这个特定的XML?

// 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); 

这是XML,我需要得到所有类别名称节点:

<?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> 

这是浏览器输出:

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)) 
+0

[?你尝试过什么(http://www.whathaveyoutried.com/) –

+1

我想这'$ XML = $ XML - >的xpath( 'PARAMS/PARAM /值/阵列/数据/值/结构/构件/值/串');' –

回答

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

使用text()="categoryName"定位到<name>/../以检索其兄弟节点<value>

完全崩溃:

  • //name[text()="categoryName"]有“类别名称”以前匹配的
  • /../父节点
  • /value/string<string>节点是匹配的父<value>孩子的文本值所有<name>节点通过/../

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" 
     } 
    } 
1

使用,而不是简单地member这样:member[name="categoryName"]

$xml = $xml->xpath('params/param/value/array/data/value/struct/member[name="categoryName"]/value/string');