2011-04-01 21 views
5

aşağıdaki XML uniqueappversionid değerini döndürmek için tanımlanmış bir XPath almak için mücadele ediyorum ile öznitelik kardeş değerini seçmek için: Daha spesifikXPath ad

<?xml version="1.0" encoding="UTF-8"?> 
<manifest package="air.com.vzw.Foo" 
      android:versionCode="0" 
      android:versionName="0.0.0" 
      android:installLocation="auto" 
      xmlns:android="http://schemas.android.com/apk/res/android"> 
    <application android:label="FooAIR"> 
     <meta-data android:name="autoOrients" android:value="true" /> 
     <meta-data android:name="fullScreen" android:value="false" /> 
     <meta-data android:name="uniqueappversionid" 
        android:value="b1e1bfa8-20b4-4724-a9c3-34b79bc50b8d" /> 
     <meta-data android:name="initialcontent" android:value="FooAIR.swf" /> 
    </application> 
</manifest> 

, ben değerini almak gerekir özniteliği android:name öğesinden uniqueappversionid'a eşit olarak meta-data öğesinden.

cevap

3

:

/manifest 
    /application 
     /meta-data[@a:name='uniqueappversionid'] 
     /@a:value 
+0

' ''/manifest/application/meta-data [@android: name = 'uniqueappversionid']/@ android: value '' 'temel olarak aynı şeyi gerçekleştiren bir şey bağlamadan kullanılır. –

2

Tamam, muhtemelen daha iyi bir yaklaşım var, ama bu kullanarak sona erdi budur:

//meta-data[@*='uniqueappversionid']/@*[2] 

Bunu iyileştirmek için önerileriniz için teşekkür ederiz ölçüde olur! http://schemas.android.com/apk/res/android ad bağlı a öneki ile

+0

Hiçbir zaman öznitelikler için konumsal yüklemler kullanmayın. XML ayrıştırıcılarının kaynak siparişini koruma yükümlülüğü yoktur. –

+2

Daha iyi olurdu // // meta-data [@ * = 'uniqueappversionid']/@ * [.! = 'Uniqueappversionid'] ' –

+1

Daha kısa:' //@*[.='uniqueappversionid']/../ @ * [. ! = 'uniqueappversionid'] ' –

0

Sizin soru size XPath sorgusu kendi içeriğine sahip olarak XPath sorgusu yürütme edildiği çerçeve ile ilgisi olduğu kadar vardır. ad kurulum

<stylesheet version="1.0" 
      xmlns="http://www.w3.org/1999/XSL/Transform" 
      xmlns:android="http://schemas.android.com/apk/res/android"> 
    <template match="/"> 
    <value-of select="//meta-data[@android:name = 'uniqueappversionid']/@android:value" /> 
    </template> 
</stylesheet> 

vasıta burada xmlns XPath sorgusu yuvalanmış altında XSLT elemanlarında niteliklerini geçer: Örneğin, burada XSLT'DE yapacağını nasıl. Tipik bir zorunlu programlama dili ortamında, sorguyu değerlendirdiğiniz XML nesnesinin/nesnelerinin parametrelendirilmesi yoluyla ad alanı takma adlarını ayarlamak zorunda olma olasılığınız yüksektir. Böyle bir ortam için bir cevap belirtmek için, XML çerçevesi hakkında spesifik olmanız gerekir.