你能用PHP中的SimpleXML来解析plist文件吗?

时间:2016-02-11 15:33:07

标签: php xml simplexml

我一直使用PHP的SimpleXML来解析XML文件,但我现在面临着一个尝试解析plist文件的挑战。

取自Apple Mac Developer Library

的示例
group by

在这样的情况下,事情很容易:例如,如果我想要获得出生年份,我只会<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Year Of Birth</key> <integer>1965</integer> <key>Pets Names</key> <array/> <key>Picture</key> <data> PEKBpYGlmYFCPA== </data> <key>City of Birth</key> <string>Springfield</string> <key>Name</key> <string>John Doe</string> <key>Kids Names</key> <array> <string>John</string> <string>Kyra</string> </array> </dict> </plist> ,因为此列表中只有一个整数。

但是,如何使用其键名返回字段的值(例如选择带有键$xml -> dict -> integer的整数)?

我可以使用元素的顺序,但我理想地寻找一种解决方案,如果将来在XML文件中重新排列元素,它将继续有效。

1 个答案:

答案 0 :(得分:3)

以下XPath会为您做到这一点:

/plist/dict/key[text()="Year Of Birth"]/following-sibling::*[1]

使用SimpleXml

$plist = simplexml_load_string($xml);
$query = '/plist/dict/key[text()="Year Of Birth"]/following-sibling::*[1]';       
$results = $plist->xpath($query);
echo (string) $results[0]; // 1965