пожалуйста, игнорируйте семантику данных XML. Я хочу отсканировать весь XML-файл и получить только значения бананов и сохранить их в виде массива в PHP.
<?xml version="1.0" encoding="UTF-8" ?>
<data>
<fruits>
<fruit id="1" >
<aisle1>
<apple>aa</apple>
<banana>ab</banana>
<cherry>ac</cherry>
<damson>ad</damson>
</aisle1>
<aisle2>
<apple>none</apple>
<banana>3708650582321691833</banana>
<cherry>none</cherry>
<damson>none</damson>
</aisle2>
<aisle3>
<apple>none</apple>
<banana>3708650582321691833</banana>
<cherry>none</cherry>
<damson>none</damson>
</aisle3>
</fruit>
<fruit id="2" >
<aisle1>
<apple>none</apple>
<banana>3708650582321691833</banana>
<cherry>none</cherry>
<damson>none</damson>
</aisle1>
<aisle2>
<apple>none</apple>
<banana>3708650582321691833</banana>
<cherry>none</cherry>
<damson>none</damson>
</aisle2>
<aisle3>
<apple>none</apple>
<banana>3708650582321691833</banana>
<cherry>none</cherry>
<damson>none</damson>
</aisle3>
</fruit>
</fruits>
Может ли xPath позволить мне это сделать? В настоящее время у меня есть:
$xml->xpath("//fruits//fruit//bananas->text()";
Благодарю.
Если вы просто заинтересованы в этом конкретном узле, просто запросите его:
$just_bunch_of_bananas = array();
$bananas = $xml->xpath('//banana'); // directly get it
foreach($bananas as $banana) { // loop each banana node :)
echo $banana . '<br/>';
$just_bunch_of_bananas[] = (string) $banana;
}
По строкам:
$rows = array();
$fruits = $xml->xpath('//fruit');
foreach($fruits as $fruit) {
foreach($fruit as $row => $aisles) {
$rows[] = array('apple' => (string )$aisles->apple, 'banana' => (string )$aisles->banana);
}
}
echo '<pre>';
print_r($rows);
Других решений пока нет …