Commit 438a5085 by Patryk Czarnik

waluty - wersje XPath

parent a76b8e69
......@@ -38,19 +38,16 @@ public class Waluty2_XPath {
for(int i = 0; i < n; i++) {
Node table = tables.item(i);
String effectiveDate = xpath.evaluate("EffectiveDate", table);
System.out.println(effectiveDate);
NodeList rates = (NodeList) xpath.evaluate("Rates/Rate", table, XPathConstants.NODESET);
// System.out.println(effectiveDate);
NodeList rates = (NodeList) xpath.evaluate("Rates/Rate[Code='" + waluta + "']", table, XPathConstants.NODESET);
final int m = rates.getLength();
for(int j = 0; j < m; j++) {
Element rate = (Element) rates.item(j);
String code = xpath.evaluate("Code", rate);
if(code.equals(waluta)) {
double mid = (Double) xpath.evaluate("Mid", rate, XPathConstants.NUMBER);
count++;
sum += mid;
if(mid < min) min = mid;
if(mid > max) max = mid;
}
Node rate = rates.item(j);
double mid = (Double) xpath.evaluate("Mid", rate, XPathConstants.NUMBER);
count++;
sum += mid;
if(mid < min) min = mid;
if(mid > max) max = mid;
}
}
long t3 = System.nanoTime();
......
package p20_xml;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
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.XPathFactory;
import java.io.File;
public class Waluty3_XPath {
// W tej wersji staram się od razu jak najwięcej wyrazić w języku XPath, a jak najmiej pisać w Javie.
public static void main(String[] args) {
String plik = "pliki/waluty2023.xml";
String waluta = "EUR";
System.out.println("Startujemy");
long t1 = System.nanoTime();
try {
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
XPathExpression kropka = xpath.compile(".");
InputSource src = new InputSource(plik);
long t2 = System.nanoTime();
double min = Double.MAX_VALUE, max = 0, sum = 0;
waluta = waluta.replace("'", "''"); // eskejpowanie dla bezpieczeństwa
final String expr = "/ArrayOfExchangeRatesTable/ExchangeRatesTable/Rates/Rate[Code='" + waluta + "']/Mid";
NodeList mids = (NodeList) xpath.evaluate(expr, src, XPathConstants.NODESET);
final int count = mids.getLength();
for(int i = 0; i < count; i++) {
double mid = (Double) kropka.evaluate(mids.item(i), XPathConstants.NUMBER);
sum += mid;
if(mid < min) min = mid;
if(mid > max) max = mid;
}
long t3 = System.nanoTime();
Runtime runtime = Runtime.getRuntime();
long pamiec = runtime.totalMemory() - runtime.freeMemory();
System.out.printf("Czas łączny : %.6f s%n", (t3-t1) * 1e-9);
System.out.printf("Zajęta pamięć : %,d B%n", pamiec);
System.out.println("Count: " + count);
if(count > 0) {
System.out.println("Sum: " + sum);
System.out.println("Avg: " + (sum / count));
System.out.println("Min: " + min);
System.out.println("Max: " + max);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package p20_xml;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
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.XPathFactory;
import java.io.File;
import java.io.FileInputStream;
public class Waluty3a_XPath_TylkoSuma {
// W tej wersji staram się od razu jak najwięcej wyrazić w języku XPath, a jak najmiej pisać w Javie.
public static void main(String[] args) {
String plik = "pliki/waluty2023.xml";
String waluta = "EUR";
System.out.println("Startujemy");
long t1 = System.nanoTime();
try {
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
InputSource src = new InputSource(plik);
long t2 = System.nanoTime();
waluta = waluta.replace("'", "''"); // eskejpowanie dla bezpieczeństwa
final String expr = "sum(/ArrayOfExchangeRatesTable/ExchangeRatesTable/Rates/Rate[Code='" + waluta + "']/Mid)";
double sum = (Double)xpath.evaluate(expr, src, XPathConstants.NUMBER);
long t3 = System.nanoTime();
Runtime runtime = Runtime.getRuntime();
long pamiec = runtime.totalMemory() - runtime.freeMemory();
System.out.printf("Czas czytania pliku: %.6f s%n", (t2-t1) * 1e-9);
System.out.printf("Czas liczenia : %.6f s%n", (t3-t2) * 1e-9);
System.out.printf("Czas łączny : %.6f s%n", (t3-t1) * 1e-9);
System.out.printf("Zajęta pamięć : %,d B%n", pamiec);
System.out.println("Sum: " + sum);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment