Hallo,
habe ein XML-Dokument, das ca. so aussieht:
[XML]<BLOCK>
<LINE VALUE="5,50"/>
<LINE VALUE="5,50"/>
</BLOCK>[/XML]
jetzt will ich eine Funktion schreiben, die die alle Line-Values eines Blocks summiert.
Auch wenn ich in Dom natürlich mit einer einfachen Schleife alle Zeilen durchlaufen könnte, habe ich mich für einen XPath-Ansatz entschieden (gefiel mir irgendwie besser).
meine Funktion sieht jetzt also so aus:
da ich immer einen Fehler erhalte, habe ich meinen XPath mal ein bisschen vereinfacht
für zweiteren Ansatz bekomme ich schon folgenden Fehler:
Ich verstehe nicht ganz wieso - der XPath ist gültig!
Könnt ihr mir da weiterhelfen?!
mfg, guni
habe ein XML-Dokument, das ca. so aussieht:
[XML]<BLOCK>
<LINE VALUE="5,50"/>
<LINE VALUE="5,50"/>
</BLOCK>[/XML]
jetzt will ich eine Funktion schreiben, die die alle Line-Values eines Blocks summiert.
Auch wenn ich in Dom natürlich mit einer einfachen Schleife alle Zeilen durchlaufen könnte, habe ich mich für einen XPath-Ansatz entschieden (gefiel mir irgendwie besser).
meine Funktion sieht jetzt also so aus:
Java:
public static Double sumAttribute(Element e, String attribute) throws XPathExpressionException
{
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");
XPathExpression exp = xpath.compile("LINE/sum(*/number(replace(@"+attribute+",',','.')))");
NodeList result = (NodeList)exp.evaluate(e, XPathConstants.NODESET);
return (result.getLength() == 0) ? new Double(0) : new Double(result.item(0).getNodeValue());
}
da ich immer einen Fehler erhalte, habe ich meinen XPath mal ein bisschen vereinfacht
Java:
XPathExpression exp = xpath.compile("LINE/@VALUE"); // funktioniert
Java:
XPathExpression exp = xpath.compile("LINE/replace(@VALUE,',','.')"); // funktioniert nicht mehr
für zweiteren Ansatz bekomme ich schon folgenden Fehler:
Java:
Exception in thread "main" net.sf.saxon.trans.XPathException: Extension function required class org.w3c.dom.NodeList; supplied value of class net.sf.saxon.value.StringValue could not be converted
at net.sf.saxon.dom.DOMObjectModel.convertXPathValueToObject(DOMObjectModel.java:354)
at net.sf.saxon.dom.DOMObjectModel.access$000(DOMObjectModel.java:39)
at net.sf.saxon.dom.DOMObjectModel$6.convert(DOMObjectModel.java:163)
at net.sf.saxon.xpath.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:352)
at com.eurofunk.sag.parsers.test2.XmlLib.sumAttribute(XmlLib.java:192)
at com.eurofunk.sag.parsers.test3.main.Main.main(Main.java:30)
--------------- linked to ------------------
javax.xml.xpath.XPathExpressionException
at net.sf.saxon.xpath.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:357)
at com.eurofunk.sag.parsers.test2.XmlLib.sumAttribute(XmlLib.java:192)
at com.eurofunk.sag.parsers.test3.main.Main.main(Main.java:30)
Caused by: net.sf.saxon.trans.XPathException: Extension function required class org.w3c.dom.NodeList; supplied value of class net.sf.saxon.value.StringValue could not be converted
at net.sf.saxon.dom.DOMObjectModel.convertXPathValueToObject(DOMObjectModel.java:354)
at net.sf.saxon.dom.DOMObjectModel.access$000(DOMObjectModel.java:39)
at net.sf.saxon.dom.DOMObjectModel$6.convert(DOMObjectModel.java:163)
at net.sf.saxon.xpath.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:352)
... 2 more
Könnt ihr mir da weiterhelfen?!
mfg, guni