Использование PHP для синтаксического анализа XML для получения значений атрибутов?

Я пытаюсь проанализировать файл XML с помощью PHP, чтобы найти значение атрибута.

XML выглядит следующим образом (example.xml):

<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<xryfile XRYVersion="6.11.1.0">
<images>
<image type="PHYSICAL" id="0" version="6.11.1">
<views>
<view type="location_history_view">
<nodes>
<node>
<properties>
<property type="application">Facebook Messenger</property>
<property type="longitude">-1.000000</property>
<property type="latitude">1.000000</property>
</properties>
</node>
</nodes>
</view>
</views>
</image>
</images>
</xryfile>

Я хочу извлечь значения узлов «свойства», но я не уверен в синтаксисе, чтобы использовать для извлечения этой информации.

Я пробовал следующий код:

<?php

$xml = simplexml_load_file('example.xml');foreach($xml->property[0]->attributes() as $a) {
echo $a;
}
?>

Я могу понять, как легко извлечь узел, если бы он сказал:

<property>Facebook Messenger</property>

Однако у меня возникают проблемы при разработке, как извлечь значения атрибута, когда это выглядит так:

<property type="application">Facebook Messenger</property>

Я был бы очень признателен за помощь в решении этой проблемы, так как я застрял на некоторое время.

Заранее спасибо 🙂

3

Решение

Есть ли конкретная причина, по которой вы должны использовать SimpleXML? если нет, вы можете попробовать с DOMDocument вместо. Код ниже:

$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->load('example.xml');

$properties = $dom->getElementsByTagName('property');
foreach($properties AS $property)
{
$value = $property->nodeValue;
$type = $property->getAttribute('type');
echo '<div>Node Information/Value :'. $value. '<br/>'. 'Node attribute:'. $type. '</div>';
}
2

Другие решения

Попробуй это:

foreach($xml->property AS $property) {
if(isset($property['type'])){
$a = $property['type'];
echo $a;
}
}
2

Это повторяет все 3 атрибута:

foreach($xml->images->image->views->view->nodes->node->properties->property as $obj){
echo $obj->attributes()->type."<br/>";
}

Результат:

application
longitude
latitude
2
По вопросам рекламы [email protected]