2021-03-31

An XPath expression in Java for getting xml elements

I want to get nodes from an api which contains xml elements.

https://www.w3schools.com/xml/cd_catalog.xml Here is the link for the api.

So my Java code is like this:

    package in.automationtesting.neh;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.io.StringReader;
    import java.net.URI;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.xpath.XPath;
    import javax.xml.xpath.XPathConstants;
    import javax.xml.xpath.XPathExpression;
    import javax.xml.xpath.XPathExpressionException;
    import javax.xml.xpath.XPathFactory;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    import org.xml.sax.InputSource;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    public class Test1 {
        
        
    
            public static final String GET_API_URL = "https://www.w3schools.com/xml/cd_catalog.xml";        
            
            public static void main(String[] args) throws IOException, InterruptedException {
                HttpClient client = HttpClient.newHttpClient();
                HttpRequest request = HttpRequest.newBuilder()
                        .GET()
                        .header("accept", "application/xml")
                        .uri(URI.create(GET_API_URL))
                        .build();
                HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
                 
        
                 XPathFactory xpathfactory = XPathFactory.newInstance();
                 XPath xpath = xpathfactory.newXPath();
                 
                try {
    
                    Reader reader = new StringReader(response.body());
                    InputSource inputSource = new InputSource(reader);
                    XPath xpath1 = XPathFactory.newInstance().newXPath();
                    System.out.println(xpath1.evaluate("//CATALOG/CD", inputSource));
                    
                } catch (XPathExpressionException e) {
                    
                    e.printStackTrace();
                }

            }
}

The output on the console should be like this:

<CATALOG>
<CD>
<TITLE>1999 Grammy Nominees</TITLE>
<ARTIST>Many</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Grammy</COMPANY>
<PRICE>10.20</PRICE>
<YEAR>1999</YEAR>
</CD>


<CD>
<TITLE>Big Willie style</TITLE>
<ARTIST>Will Smith</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1997</YEAR>
</CD>
</CATALOG>

With the xpath expression i want to get the cd's which are released from 1995 and later ,plus they should be only from USA. And when i only match the root in the xpath expression which is CATALOG it shows all the elements which is good, but when i add cd next to it, on the console it only shows one album and not all of them, idk why i tried something like this in the expression and other varieties of it but no luck "//CATALOG/CD[@year>1995 and country='USA']



from Recent Questions - Stack Overflow https://ift.tt/3sPq7w1
https://ift.tt/eA8V8J

No comments:

Post a Comment