使用 xmllint 从 xml 获取属性值
Get attribute value from xml with xmllint
我有 AndroidManifest.xml 文件,我想用 xmllint 获取版本代码和名称
我尝试像
这样的命令
xmllint --xpath "string(//manifest/@android:versionCode)" AndroidManifest.xml
xmllint --xpath "string(//manifest/@android:versionName)" AndroidManifest.xml
我没有任何输出
如果我输入
xmllint --xpath "string(//manifest/@package)" AndroidManifest.xml
我得到包名。
那么如何从包含“:”的属性中获取值?
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="5" android:versionName="1.0" package="com.mobile.android" android:installLocation="auto">
<uses-sdk android:minSdkVersion="19" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application android:allowBackup="true" android:label="@string/app_name">
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.mobile.android" />
</intent-filter>
</receiver>
</application>
</manifest>
您必须指定 namespace-uri
并使用 local-name
获取不带命名空间前缀的属性名称:
xmllint --xpath '
string(/manifest/@*[local-name()="versionName"
and namespace-uri()="http://schemas.android.com/apk/res/android"])
' AndroidManifest.xml
我有 AndroidManifest.xml 文件,我想用 xmllint 获取版本代码和名称 我尝试像
这样的命令xmllint --xpath "string(//manifest/@android:versionCode)" AndroidManifest.xml
xmllint --xpath "string(//manifest/@android:versionName)" AndroidManifest.xml
我没有任何输出
如果我输入
xmllint --xpath "string(//manifest/@package)" AndroidManifest.xml
我得到包名。
那么如何从包含“:”的属性中获取值?
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="5" android:versionName="1.0" package="com.mobile.android" android:installLocation="auto">
<uses-sdk android:minSdkVersion="19" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application android:allowBackup="true" android:label="@string/app_name">
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.mobile.android" />
</intent-filter>
</receiver>
</application>
</manifest>
您必须指定 namespace-uri
并使用 local-name
获取不带命名空间前缀的属性名称:
xmllint --xpath '
string(/manifest/@*[local-name()="versionName"
and namespace-uri()="http://schemas.android.com/apk/res/android"])
' AndroidManifest.xml