我一直使用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文件中重新排列元素,它将继续有效。
答案 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