可以使用PHP中的SimpleXML解析plist文件吗?
Can you use SimpleXML in PHP to parse plist files?
我一直使用 PHP 的 SimpleXML 来解析 XML 文件,但我现在面临着解析 plist 文件的挑战。
取自 Apple Mac Developer Library 的示例:
<?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
因为此列表中只有一个整数。
但是,我如何 return 使用其键名的字段的值(例如 select 键为 Year of Birth
的整数)?
我可以只使用元素的顺序,但理想情况下我正在寻找一种解决方案,如果将来元素在 XML 文件中重新排列,该解决方案将继续工作。
以下 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
我一直使用 PHP 的 SimpleXML 来解析 XML 文件,但我现在面临着解析 plist 文件的挑战。
取自 Apple Mac Developer Library 的示例:
<?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
因为此列表中只有一个整数。
但是,我如何 return 使用其键名的字段的值(例如 select 键为 Year of Birth
的整数)?
我可以只使用元素的顺序,但理想情况下我正在寻找一种解决方案,如果将来元素在 XML 文件中重新排列,该解决方案将继续工作。
以下 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