2015-11-04 4 views
0

У меня есть этот XML-фрагмент:PHP и XPath пытается перебрать дочерние элементы определенного элемента

<ad:images gallery-url="http://myimage.com/adifferent/gallery.JPG" url="https://myxmlonly/images"> 
    <ad:image> 
    <ad:representation size="S" url="http://myimage.com/adifferent/12345/S.JPG"/> 
    <ad:representation size="XL" url="http://myimage.com/adifferent/12345/XL.JPG"/> 
    <ad:representation size="ICON" url="http://myimage.com/adifferent/12345/ICON.JPG"/> 
    <ad:representation size="L" url="http:/myimage.com/adifferent/12345/L.JPG"/> 
    <ad:representation size="M" url="http://myimage.com/adifferent/12345/M.JPG"/> 
    </ad:image> 
    <ad:image> 
    <ad:representation size="S" url="http://myimage.com/adifferent/67890/S.JPG"/> 
    <ad:representation size="XL" url="http://myimage.com/adifferent/67890/XL.JPG"/> 
    <ad:representation size="ICON" url="http://myimage.com/adifferent/67890/ICON.JPG"/> 
    <ad:representation size="L" url="http:/myimage.com/adifferent/67890/L.JPG"/> 
    <ad:representation size="M" url="http://myimage.com/adifferent/67890/M.JPG"/> 
    </ad:image> 
</ad:images> 

, и я пытаюсь получить различные тракты для различных изображений из этого блока. Но мой сценарий только кажется, чтобы получить первый блок, итерацию н-раз, если представлено более чем один раз, но сохраняет только пять различных URL, образуют первый блок таким образом я получаю что-то вроде:

array(2) { 
    [0]=> 
    array(5) { 
    ["S"]=> 
    string(66) "http://myimage.com/adifferent/12345/S.JPG" 
    ["XL"]=> 
    string(66) "http://myimage.com/adifferent/12345/XL.JPG" 
    ["ICON"]=> 
    string(66) "http://myimage.com/adifferent/12345/ICON.JPG" 
    ["L"]=> 
    string(65) "http:/myimage.com/adifferent/12345/L.JPG" 
    ["M"]=> 
    string(66) "http://myimage.com/adifferent/12345/M.JPG" 
    } 
    [1]=> 
    array(5) { 
    ["S"]=> 
    string(66) "http://myimage.com/adifferent/12345/S.JPG" 
    ["XL"]=> 
    string(66) "http://myimage.com/adifferent/12345/XL.JPG" 
    ["ICON"]=> 
    string(66) "http://myimage.com/adifferent/12345/ICON.JPG" 
    ["L"]=> 
    string(65) "http:/myimage.com/adifferent/12345/L.JPG" 
    ["M"]=> 
    string(66) "http://myimage.com/adifferent/12345/M.JPG" 
    } 

Я попытался различные подходы, но мне кажется, что я не могу получить мою голову вокруг него: Вот фрагмент кода то будет производить это:

//Get the images 
    $images_array = array(); 

    //Path to images 
    $images = $xml->xpath("//ad:images/*"); 

    //Starting index 
    $ind = 0; 

    //$image = $xml->xpath("//ad:image"); 
    //Iterate through images 
    foreach($images as $node) { 

    //Get pathes for all sizes 
    $image = $node->xpath("//ad:image/*"); 

    //Iterate through size 
    foreach($image as $imgSize) { 
    //foreach($node->xpath("//ad:representation") as $imgSize) { 

     //$size = $imgSize[0]['size']; 
     $size = $imgSize[0]['size']; 

     //Store size in array 
     $images_array[$ind][(string)$size] = (string) $imgSize[0]['url']; 
    } 
    //Increse index 
    $ind++; 
    } 

Спасибо за чтение :)

ответ

0

Трещины это сам:

$ind = 0; 
foreach($xml->xpath("//ad:image") as $image) 
{ 
    foreach($image->xpath(".//ad:representation") as $imgSize) 
    { 
    $size = $imgSize['size']; 
    $images_array[$ind][(string)$size] = (string)$imgSize['url']; 
    } 
    $ind++; 
}