2012-12-23 79 views
1

好了,所以讓我們說我有一些這樣的XML ...獲取父元素

<blaah1 name="whatever"> 
<gender name="male"> 

<example1 baseurl="male/86644/"> 
<x u="lol.png"/> 
<x u="haha.png"/> 
<x u="name.png"/> 
</example1> 

<example2 baseurl="male/27827/"> 
<x u="page.png"/> 
<x u="examp.png"/> 
<x u="bottom.png"/> 
</example2> 

</gender> 
</blaah1> 

什麼我需要做的,以顯示對父母的baseurl每個月底的u=""內容兒童?

+0

只需要xpath和每個都需要。 –

回答

1

據我所知,你不能用一個xpath表達式來做到這一點,但你需要循環結果。這種循環的示例:

$base = ''; 
foreach($xp->query('//@baseurl|//*[@baseurl]/x/@u') as $element) { 
    $value = $element->value; 
    if (substr($value, -1,1) === '/') { 
     $base = $value; 
    } else { 
     echo $base, $value, "\n"; 
    } 
} 

有了您的示例XML文檔:

male/86644/lol.png 
male/86644/haha.png 
male/86644/name.png 
male/27827/page.png 
male/27827/examp.png 
male/27827/bottom.png 

這個例子是使用UNION運算符|獲得一下子就想節點。


我最初想在xpath中做下面的事情,但不可能AFAIK。但是PHP可以照顧這個:運行在上下文中的XPath表達式到以前的XPath查詢節點:

$array = array_map(function($context) use($xp) { 
    return $xp->evaluate('concat(../../@baseurl, .)', $context); 
}, iterator_to_array($xp->query('//x/@u'))); 

$array則:

Array 
(
    [0] => male/86644/lol.png 
    [1] => male/86644/haha.png 
    [2] => male/86644/name.png 
    [3] => male/27827/page.png 
    [4] => male/27827/examp.png 
    [5] => male/27827/bottom.png 
) 

這可能是更直截了當。

+0

謝謝你的回答,非常感謝:) –

0

如果您向每個名爲baseid的孩子添加一個額外的元素,並且其內容將成爲下面的父母名稱。 。 。

<blaah1 name="whatever"> 
<gender name="male"> 

<example1 baseurl="male/86644/"> 
<x u="lol.png" baseid="example1"/> 
<x u="haha.png" baseid="example1"/> 
<x u="name.png" baseid="example1"/> 
</example1> 

<example2 baseurl="male/27827/"> 
<x u="page.png" baseid="example2"/> 
<x u="examp.png" baseid="example2"/> 
<x u="bottom.png" baseid="example2"/> 
</example2> 

</gender> 
</blaah1> 

你可以得到父母的BaseURL和兒童ü與兩個XPath低於

$xml_load = simplexml_load_file("myxmlfile.xml"); 

$x = $xml_load->xpath('//gender[@name="male"]/*/x'); 
foreach($x as $display) 
{ 
$base_url = $xml_load->xpath('//gender[@name="male"]/'.$display["baseid"].''); 
foreach($base_url as $base) 
{ 
echo 'img: '. $base['baseurl'] . $display['u'],'<hr>'; 
} 
} 

成品輸出。 。 。

img: male/86644/lol.png 
img: male/86644/haha.png 
img: male/86644/name.png 
img: male/27827/page.png 
img: male/27827/examp.png 
img: male/27827/bottom.png