如何使用 xpath 检索属性名称中包含冒号的属性值

问题描述 投票:0回答:3

我有一个简单的要求,我需要获取属性

xml:id
的值,即
af1
。 我正在使用
SAXParser
,这是我的
xpath:a/aff/@xml:id
相反,我能够获取使用
xpath:a/aff/@value
的价值。

但是我无法检索该值,你能帮我吗?

<?xml version="1.0" encoding="UTF-8" ?>
<a>
   <aff xml:id="af1" value="a">
        <uAff>
            Hello
        </uAff>
    </aff>
    <aff xml:id="corr1">
        <uAff>
            Hello1
        </uAff>
    </aff>
</a>

提前致谢。

java android xml xml-parsing saxparser
3个回答
28
投票

要获取可以使用的属性的值:

/a/aff/@*[name()='xml:id']

1
投票

/a/aff/@xml:id 在获取值方面效果很好...

您是否想同时获取这两个值?

如果您只想获取第一个值,您可以使用 /a/aff[1]/@xml:id


0
投票

@tibtof 的解决方案适用于我复杂的 Cordova config.xml 转换,使用 gulp 和 gulp-xml-transformer 通过定位

android:host
属性来修复 ionic-plugin-deeplinks AndroidManifest.xml 实现,因为属性名称中的冒号将不适用于
path: '//xmlns:platform[@name="android"]/xmlns:config-file/xmlns:intent-filter/xmlns:data[@android:host]'
:

gulpfile.js:

var gulp = require('gulp'),
    xeditor = require("gulp-xml-transformer");

function config(avc, bundleId, ioscfbv, version, appLabel, hostname, done) {
    .pipe(xeditor([
        {
            path: '//xmlns:widget',
            attr: { 'android-versionCode': avc, 'id': bundleId, 'ios-CFBundleVersion': ioscfbv, 'version': version }
        },
        {
            path: '//xmlns:name',
            text: appLabel
        },
        {
            path: '//*[@name="Hostname"]',
            attr: { 'value': bundleId }
        },
        {
            path: '//*[@name="ios"]/xmlns:config-file/xmlns:array/xmlns:string',
            text: 'applinks:' + hostname
        },
        {
            path: '//xmlns:platform[@name="android"]/xmlns:config-file/xmlns:intent-filter/xmlns:data[@*[name()="android:host"]]',
            attr: { 'android:host': hostname }
        }
    ], 'http://www.w3.org/ns/widgets'))
    .pipe(gulp.dest('.'))
    .on('finish', done);
}

配置.xml:

<widget xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0" android-versionCode="0" id="com.bundle.placeholder" ios-CFBundleVersion="1.0.0.0" version="1.0.0">
    ...
    <platform name="android">
        ...
        <config-file target="AndroidManifest.xml" parent="/manifest/application/activity">
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="https"/>
                <data android:host="ehi.evclear.dev"/>
            </intent-filter>
        </config-file>
        ...
    </platform>
    ...
</widget>

© www.soinside.com 2019 - 2024. All rights reserved.