我正在努力让XPath定义为从以下XML返回uniqueappversionid
的值:
<?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>
更具体地说,我需要从android:value
元素中获取meta-data
属性的值,android:name
等于uniqueappversionid
。
答案 0 :(得分:3)
将a
前缀绑定到http://schemas.android.com/apk/res/android
命名空间:
/manifest
/application
/meta-data[@a:name='uniqueappversionid']
/@a:value
答案 1 :(得分:2)
好的,可能有更好的方法,但这就是我最终使用的方法:
//meta-data[@*='uniqueappversionid']/@*[2]
我非常感谢有关改善这一点的建议!
答案 2 :(得分:0)
您的问题与执行XPath查询的框架一样,与XPath查询本身的内容有关。例如,以下是如何在XSLT中执行此操作:
<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>
这里的命名空间设置方法是通过嵌套XPath查询的XSLT元素上的xmlns属性。在典型的命令式编程语言环境中,您可能更有可能必须通过参数化您要评估查询的XML对象来设置命名空间别名。要为这样的环境指定答案,您必须具体了解XML框架。