可以使用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