Вот пример бита из XML-файла:
<array>
<dict>
<key>Name</key>
<string>Joe Smith</string>
<key>Type</key>
<string>Profile</string>
<key>Role</key>
<string>User</string>
<key>Some Number</key>
<integer>1</integer>
<key>Some Boolean</key>
<true/>
</dict>
</array>
У меня две отдельные цели. Первый - извлечь массив из узла dict
, который будет выглядеть следующим образом:
[Name] => Joe Smith
[Type] => Profile
[Role] => User
[Some Number] => 1
[Some Boolean] => true
Необязательно, чтобы логическое значение было включено, поэтому, если это добавляет слишком много сложности, я бы просто знал, как теперь обращаться с другими.
Вторая цель состоит в том, чтобы иметь возможность выбрать узел значения (<string>
, <integer>
и т. Д.), Чтобы я мог изменить значение. Я знаю, что мне нужно будет выбрать его на основе текстового значения предыдущего ключевого элемента.
Я думаю, что следующий XPath должен работать:
//key[.=$keyname]/following-sibling[1]
Но я не уверен.
По сути, вся эта система, которую использует Apple, кажется логичной, но полностью противоречит моему пониманию того, как должен работать XML. Если бы я управлял миром, исходный XML выглядел бы так:
<dict type="array">
<value key="Name" type="string">Joe Smith</value>
<value key="Type" type="string">Profile</value>
<value key="Role type="string">User</value>
<value key="Some Number" type="integer">1</value>
<value key="Some Boolean" type="boolean">true</value>
</dict>
Но так как это довольно логично, мне интересно, упускаю ли я какой-то очевидный способ справиться с этим.