我尝试从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' => '***',
]