Я хочу запрашивать XML-файлы plist через xmlstartlet
. Я ищу текст тега string
сразу после уникального тега key
. XML-файл может выглядеть так
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>15B42</string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleIconFile</key>
<string>AppIcon</string>
.
.
.
</dict>
</plist>
or
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<othertag>
<dict>
<key>BuildMachineOSBuild</key>
<string>15B42</string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleIconFile</key>
<string>AppIcon</string>
.
.
.
</dict>
</othertag>
</plist>
В любом случае я ищу способ строкового значения после, например. ключ CFBundleDevelopmentRegion
(в данном случае en
).
Таким образом, место в иерархии, где находится dict, неизвестно (это может быть /plist/dict
или /plist/another/dict
или где-то еще), но ключевой текст уникален во всем файле.
я пытался
xmlstarlet sel -t -v '//string/following::key[text()="CFBundleDevelopmentRegion"]' myfile.plist
но я не получаю никакого вывода. Мой XPath неверен или мне нужно указать другие параметры для xmlstarlet
?