Как получить XML-файл настроек Android с помощью PHP? - PullRequest
0 голосов
/ 05 июля 2019

Я пытался извлечь данные из файла XML. Этот файл является XML-файлом настроек Android, поэтому карта и сборка XML такие разные.

Я могу получить доступ к файлу, но не получаю ожидаемого результата.

Пример моего файла XML:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="prefSipIntercom7Id"></string>
    <string name="pref_WeatherLast_Icon">01d</string>
    <string name="project_code">******</string>
    <string name="serial_number">*****</string>
</map>

Это мой код:

$xmlDoc = new DOMDocument();
$data = $xmlDoc->load("com.smartcozum.spad_preferences.xml");
$obj3 = $xmlDoc->saveXML($xmlDoc);
$xml = simplexml_load_string($obj3);
$json = json_encode($xml);
$array = json_decode($json, TRUE);
$counter = count($array['string']);

for ($i = 0; $i < $counter; $i++) { 
    if(is_array($array['string'][$i])){
        print_r($array['string'][$i]['@attributes']);
    } else {
        echo $array['string'][$i];
    }
    echo '<br>';
}

Выход:

Array ( [name] => prefSipIntercom7Id )

Здесь значение 01d отсутствует.

Ожидаемый результат:

Array ( [name] => prefSipIntercom7Id, [value] => 01d )

1 Ответ

1 голос
/ 05 июля 2019

Почему бы не получить к нему доступ с помощью экземпляра DomDocument, поскольку вы уже инициализировали его. Просто создайте массив с необходимой информацией.

<code>$doc = new \DomDocument();
$doc->load($filename);

$data = [];
$elements = $doc->getElementsByTagName('string');
foreach ($elements as $element) {
     $data[$element->getAttribute('name')] = $element->nodeValue;
}

echo "<pre>";
var_dump($data);
echo "
";

Ожидаемый результат ...

[
    'prefSipIntercom7Id' => '',
    'pref_WeatherLast_Icon' => '01d',
    'project_code' => '***',
    'serial_number' => '***',
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...