2010-08-05 2 views
0

У меня есть фиктивный XML, как это:SimpleXML и тот же ребенок

<SOA> 
<cities> 
    <area>Area1</area> 
    <period>period1</period> 
    <center>center1</center> 
</cities> 
<cities> 
    <area>Area1</area> 
    <period>period1</period> 
    <center>center2</center> 
</cities> 
<cities> 
    <area>Area2</area> 
    <period>period1</period> 
    <center>center3</center> 
</cities> 
</SOA> 

Я хочу, чтобы петли через XML, мой вопрос: Как я могу цикл корыта повторил ребенок? например, область цикла, которая называется Area1? (Есть 2 Area1 с Center1 и center2, я хочу сделать запрос следующим образом: найти весь центр, площадь Area1) Заранее спасибо

+2

Может быть, это только у меня, но я не понял вопрос. Чего вы хотите достичь? – VolkerK

+0

Я не вижу проблемы. Это правильный XML, так почему бы не работать? – Gaim

+0

Я отредактировал мой вопрос. Спасибо за помощь – TheNone

ответ

4

< хрустального шар > Может быть, вы хотите перебрать все cities элементов, которые имеют a area элемент с текстом Area1 </хрустальный шар >
Для этого можно использовать XPath, например

<?php 
$soa = getDoc(); 
foreach($soa->xpath('cities[area="Area1"]') as $ci) { 
    foreach($ci->children() as $child) { 
    echo $child->getName(), ': ', (string)$child, "\n"; 
    } 
} 

function getDoc() { 
    return new SimpleXMLElement('<SOA> 
    <cities> 
     <area>Area1</area> 
     <period>period1</period> 
     <center>center1</center> 
    </cities> 
    <cities> 
     <area>Area1</area> 
     <period>period1</period> 
     <center>center2</center> 
    </cities> 
    <cities> 
     <area>Area2</area> 
     <period>period1</period> 
     <center>center3</center> 
     </cities> 
    </SOA>'); 
} 

печатает

area: Area1 
period: period1 
center: center1 
area: Area1 
period: period1 
center: center2 
+0

Спасибо! Наконец, я могу подобрать и понять по частям. :) –

2

Да, конечно. Прочитайте, например PHP XPath руководства

http://php.net/manual/en/simplexmlelement.xpath.php

$xml = new SimpleXMLElement($yourXML); 

$result = $xml->xpath('/SOA/cities/SOA/cities[area="Area1"]'); 

while(list(, $node) = each($result)) { 
    //$node is a city node with Area1 area 
} 
Смежные вопросы