Find elements within array, by specific property with jxpath

439 Views Asked by At

What is wrong with the JXpath expression in the code below? The following code always throws this exception:

org.apache.commons.jxpath.JXPathNotFoundException: No value for xpath: countries[gdp=4]

However I expected the country Germany to be returned. Whats wrong here?

import org.apache.commons.jxpath.JXPathContext;

public class Test {

    private final Country[] countries = {
        new Country("US", 20),
        new Country("China", 13),
        new Country("Japan", 5),
        new Country("Germany", 4),
        new Country("UK", 3)};

    public static void main(String[] args) {
        Object result = JXPathContext.newContext(new Test()).getValue("countries[gdp=4]");
        System.out.println(result);
    }

    public Country[] getCountries() {
        return countries;
    }   
}

-

class Country{

    private String name;
    private int gdp;

    public Country(String name, Integer gdp){
        this.name=name;
        this.gdp=gdp;
    }

    @Override
    public String toString() {
        return name;
    }

    public String getName() {
        return name;
    }

    public int getGdp() {
        return gdp;
    }
}
2

There are 2 best solutions below

0
eztam On BEST ANSWER

It started to work after I replaced:

Object result = JXPathContext.newContext(new Test()).getValue("countries[gdp=4]");

By:

Iterator result = JXPathContext.newContext(new Test()).iterate("countries[gdp=4]");
1
Thilo Schwarz On

I don't know enough about the jxpath lib you are using. But the xpath expression should be like this:

/countries/country[gdp=4]