2016-03-20 23 views
1

ile benzersiz anahtar etiketi sonra dize metni ayıklamak nasıl plut XML dosyaları xmlstartlet üzerinden sorgulamak istiyorum. etiketindenetiketi düzgün bir key etiketi sonra arıyorum. XML dosyası Ben mesela sonra Bu yolda dize değeri arıyorum Her durumdaÖzet dosyaları xmlstarlet aracı

<?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> 

veya

<?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> 

benzeyebilir CFBundleDevelopmentRegion anahtarı (bu durumda en).

Bu nedenle, hizinin oluştuğu hiyerarşideki yer bilinmemektedir (/plist/dict veya /plist/another/dict veya başka bir yerde olabilir), ancak anahtar metin tüm dosyada benzersizdir.

Ben

xmlstarlet sel -t -v '//string/following::key[text()="CFBundleDevelopmentRegion"]' myfile.plist 

denedi ama herhangi bir çıktı alamadım. XPath'ım yanlış mı yoksa xmlstarlet'a başka parametreler belirtmek zorunda mıyım?

//key[.='CFBundleDevelopmentRegion']/following-sibling::string[1] 

XPath yerde içerik "CFBundleDevelopmentRegion" eşittir XML belgesine, içinde, key elemanı bulacaksınız, sonra yakın aşağıdaki-kardeş string elemanı döndürür:

cevap

2

Bu şekilde deneyebilirsiniz.

Yani xmlstarlet ile tam komut satırı aşağıdaki gibidir:

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

Bu işi mükemmel! – halloleo