如何使用PHP获取Android首选项XML文件



我尝试从XML文件获取数据。该文件是一个Android首选项XML文件,因此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 )

为什么不使用domdocument实例访问它,因为您已经初始化了它。只需创建一个带有所需信息的数组。

$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 "</pre>";

预期的结果是...

[
    'prefSipIntercom7Id' => '',
    'pref_WeatherLast_Icon' => '01d',
    'project_code' => '***',
    'serial_number' => '***',
]

最新更新