XPATH:在文档中的任何位置查找文本

时间:2017-05-16 08:51:19

标签: xml xpath

有没有办法只搜索整个html文档中的文本而不用担心标签,类等?

2 个答案:

答案 0 :(得分:2)

是的,就像这样:

//*[text()[contains(.,'keyword')]]
//text()[contains(.,'keyword')]/..

或者,如果您希望返回目标关键字所在的父元素,请使用以下XPath之一:

public static void main(String args[]) {
    Observable.concat(getFromMemory(), getFromFileCache(), getFromNetwork())
            .firstElement()
            .subscribe((integer) ->
            {
                System.out.println("Completed with val: " + integer);
            });
}

static Observable<Integer> getFromMemory() {

    return Observable.create(e -> {
        System.out.println("Source: Memory");
        e.onNext(1);
        e.onComplete();
    });
}

static Observable<Integer> getFromFileCache() {
    try {
        Thread.sleep(1000);
    }
    catch (InterruptedException e) {
        e.printStackTrace();
    }

    return Observable.create(e -> {
        System.out.println("Source: FileCache");
        e.onNext(2);
        e.onComplete();
    });
}

static Observable<Integer> getFromNetwork() {
    try {
        Thread.sleep(2000);
    }
    catch (InterruptedException e) {
        e.printStackTrace();
    }

    return Observable.create(e -> {
        System.out.println("Source: Network");
        e.onNext(3);
        e.onComplete();
    });
}

答案 1 :(得分:1)

这个XPath,

contains(/,'keyword')
如果keyword包含在文档的字符串值中的任何位置,

将返回true。

请注意,它可以匹配跨元素连接的子串(即<r>key<b>word</b></r>),这可能是也可能不是。如果不受欢迎,请参阅@har07's answer(+1)。

另请参阅: Testing text() nodes vs string values in XPath