在plist文件中,如何通过xmlstarlet工具提取唯一键标记后的字符串文本

在plist文件中,如何通过xmlstarlet工具提取唯一键标记后的字符串文本,xml,xpath,plist,xmlstarlet,Xml,Xpath,Plist,Xmlstarlet,我想通过查询plistxml文件。我正在查找唯一的键标记后面的字符串标记的文本。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>

我想通过查询plistxml文件。我正在查找唯一的
标记后面的
字符串
标记的文本。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>
但我没有得到任何输出。我的XPath是否错误,或者我是否必须为
xmlstarlet
指定其他参数?

您可以这样尝试:

//key[.='CFBundleDevelopmentRegion']/following-sibling::string[1]
XPath将在XML文档中的任何位置找到
key
元素,其中的内容等于
“CbundledevelopmentRegion”
,然后返回下面最近的同级
string
元素

因此,
xmlstarlet
的完整命令行如下所示:

xmlstarlet sel --net -t -v '//key[.="CFBundleShortVersionString"]/following-sibling::string[1]' myfile.plist
//key[.='CFBundleDevelopmentRegion']/following-sibling::string[1]
xmlstarlet sel --net -t -v '//key[.="CFBundleShortVersionString"]/following-sibling::string[1]' myfile.plist