Search in sources :

Example 11 with XdmItem

use of net.sf.saxon.s9api.XdmItem in project sirix by sirixdb.

the class TestNodeWrapperS9ApiXQuery method testOrderByBooks.

@Test
public void testOrderByBooks() throws Exception {
    final XdmValue value = new XQueryEvaluator("for $x in /bookstore/book where $x/price>30 order by $x/title return $x/title", mHolder.getSession()).call();
    final StringBuilder strBuilder = new StringBuilder();
    for (final XdmItem item : value) {
        strBuilder.append(item.toString());
    }
    assertEquals("<title lang=\"en\">Learning XML</title><title lang=\"en\">XQuery Kick Start</title>", strBuilder.toString());
}
Also used : XdmValue(net.sf.saxon.s9api.XdmValue) XQueryEvaluator(org.sirix.saxon.evaluator.XQueryEvaluator) XdmItem(net.sf.saxon.s9api.XdmItem) Test(org.junit.Test)

Example 12 with XdmItem

use of net.sf.saxon.s9api.XdmItem in project sirix by sirixdb.

the class TestNodeWrapperS9ApiXQuery method testFLOWR.

@Test
public void testFLOWR() throws Exception {
    final XdmValue value = new XQueryEvaluator("for $x in /bookstore/book let $y := $x/price where $y>30 order by $x/title return $x/title", mHolder.getSession()).call();
    final StringBuilder strBuilder = new StringBuilder();
    for (final XdmItem item : value) {
        strBuilder.append(item.toString());
    }
    assertEquals("<title lang=\"en\">Learning XML</title><title lang=\"en\">XQuery Kick Start</title>", strBuilder.toString());
}
Also used : XdmValue(net.sf.saxon.s9api.XdmValue) XQueryEvaluator(org.sirix.saxon.evaluator.XQueryEvaluator) XdmItem(net.sf.saxon.s9api.XdmItem) Test(org.junit.Test)

Example 13 with XdmItem

use of net.sf.saxon.s9api.XdmItem in project jmeter by apache.

the class XPathUtilTest method testBug63033.

@Test
public void testBug63033() throws SaxonApiException {
    Processor p = new Processor(false);
    XPathCompiler c = p.newXPathCompiler();
    c.declareNamespace("age", "http://www.w3.org/2003/01/geo/wgs84_pos#");
    String xPathQuery = "//Employees/Employee[1]/age:ag";
    XPathExecutable e = c.compile(xPathQuery);
    XPathSelector selector = e.load();
    selector.setContextItem(p.newDocumentBuilder().build(new StreamSource(new StringReader(xmlDoc))));
    XdmValue nodes = selector.evaluate();
    XdmItem item = nodes.itemAt(0);
    assertEquals("<age:ag xmlns:age=\"http://www.w3.org/2003/01/geo/wgs84_pos#\">29</age:ag>", item.toString());
}
Also used : XdmValue(net.sf.saxon.s9api.XdmValue) Processor(net.sf.saxon.s9api.Processor) XPathCompiler(net.sf.saxon.s9api.XPathCompiler) XPathSelector(net.sf.saxon.s9api.XPathSelector) StreamSource(javax.xml.transform.stream.StreamSource) StringReader(java.io.StringReader) XPathExecutable(net.sf.saxon.s9api.XPathExecutable) XdmItem(net.sf.saxon.s9api.XdmItem) Test(org.junit.jupiter.api.Test)

Example 14 with XdmItem

use of net.sf.saxon.s9api.XdmItem in project jmeter by apache.

the class XPathUtil method putValuesForXPathInListUsingSaxon.

public static void putValuesForXPathInListUsingSaxon(String xmlFile, String xPathQuery, List<String> matchStrings, boolean fragment, int matchNumber, String namespaces) throws SaxonApiException, FactoryConfigurationError {
    // generating the cache key
    final ImmutablePair<String, String> key = ImmutablePair.of(xPathQuery, namespaces);
    // check the cache
    XPathExecutable xPathExecutable;
    if (StringUtils.isNotEmpty(xPathQuery)) {
        xPathExecutable = XPATH_CACHE.get(key);
    } else {
        log.warn("Error : {}", JMeterUtils.getResString("xpath2_extractor_empty_query"));
        return;
    }
    try (StringReader reader = new StringReader(xmlFile)) {
        // We could instantiate it once but might trigger issues in the future
        // Sharing of a DocumentBuilder across multiple threads is not recommended.
        // However, in the current implementation sharing a DocumentBuilder (once initialized)
        // will only cause problems if a SchemaValidator is used.
        net.sf.saxon.s9api.DocumentBuilder builder = PROCESSOR.newDocumentBuilder();
        XdmNode xdmNode = builder.build(new SAXSource(new InputSource(reader)));
        if (xPathExecutable != null) {
            XPathSelector selector = null;
            try {
                selector = xPathExecutable.load();
                selector.setContextItem(xdmNode);
                XdmValue nodes = selector.evaluate();
                int length = nodes.size();
                int indexToMatch = matchNumber;
                // In case we need to extract everything
                if (matchNumber < 0) {
                    for (XdmItem item : nodes) {
                        if (fragment) {
                            matchStrings.add(item.toString());
                        } else {
                            matchStrings.add(item.getStringValue());
                        }
                    }
                } else {
                    if (indexToMatch <= length) {
                        if (matchNumber == 0 && length > 0) {
                            indexToMatch = JMeterUtils.getRandomInt(length) + 1;
                        }
                        XdmItem item = nodes.itemAt(indexToMatch - 1);
                        matchStrings.add(fragment ? item.toString() : item.getStringValue());
                    } else {
                        if (log.isWarnEnabled()) {
                            log.warn("Error : {}{}", JMeterUtils.getResString("xpath2_extractor_match_number_failure"), indexToMatch);
                        }
                    }
                }
            } finally {
                if (selector != null) {
                    try {
                        selector.getUnderlyingXPathContext().setContextItem(null);
                    } catch (Exception e) {
                    // NOSONAR Ignored on purpose
                    // NOOP
                    }
                }
            }
        }
    }
}
Also used : InputSource(org.xml.sax.InputSource) XdmNode(net.sf.saxon.s9api.XdmNode) XMLStreamException(javax.xml.stream.XMLStreamException) SAXException(org.xml.sax.SAXException) TransformerException(javax.xml.transform.TransformerException) SaxonApiException(net.sf.saxon.s9api.SaxonApiException) IOException(java.io.IOException) SAXParseException(org.xml.sax.SAXParseException) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException) XdmValue(net.sf.saxon.s9api.XdmValue) SAXSource(javax.xml.transform.sax.SAXSource) XPathSelector(net.sf.saxon.s9api.XPathSelector) StringReader(java.io.StringReader) XPathExecutable(net.sf.saxon.s9api.XPathExecutable) XdmItem(net.sf.saxon.s9api.XdmItem)

Aggregations

XdmItem (net.sf.saxon.s9api.XdmItem)14 XPathSelector (net.sf.saxon.s9api.XPathSelector)9 Test (org.junit.Test)9 XdmValue (net.sf.saxon.s9api.XdmValue)6 StringReader (java.io.StringReader)3 Processor (net.sf.saxon.s9api.Processor)3 SaxonApiException (net.sf.saxon.s9api.SaxonApiException)3 XdmNode (net.sf.saxon.s9api.XdmNode)3 XQueryEvaluator (org.sirix.saxon.evaluator.XQueryEvaluator)3 IOException (java.io.IOException)2 TransformerException (javax.xml.transform.TransformerException)2 SAXSource (javax.xml.transform.sax.SAXSource)2 XPathCompiler (net.sf.saxon.s9api.XPathCompiler)2 XPathExecutable (net.sf.saxon.s9api.XPathExecutable)2 InputSource (org.xml.sax.InputSource)2 SAXException (org.xml.sax.SAXException)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 InputStream (java.io.InputStream)1 OutputStream (java.io.OutputStream)1 ArrayList (java.util.ArrayList)1