From 391c7935ae40f60672b88312b02151c3f941796e Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Mon, 31 Mar 2014 16:18:42 +0200 Subject: Outcome.setFieldByXPath (refs #167) --- .../com/c2kernel/persistency/outcome/Outcome.java | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/java/com/c2kernel/persistency/outcome/Outcome.java b/src/main/java/com/c2kernel/persistency/outcome/Outcome.java index f25922c..5604332 100644 --- a/src/main/java/com/c2kernel/persistency/outcome/Outcome.java +++ b/src/main/java/com/c2kernel/persistency/outcome/Outcome.java @@ -12,6 +12,7 @@ import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; +import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.w3c.dom.bootstrap.DOMImplementationRegistry; @@ -118,11 +119,20 @@ public class Outcome implements C2KLocalObject { } public void setData(Document data) { - mData = serialize(data, false); dom = data; + mData = null; } + + public void setFieldByXPath(String xpath, String data) throws XPathExpressionException { + Node field = getNodeByXPath(xpath); + field.setNodeValue(data); + } + public String getData() { + if (mData == null && dom != null) { + mData = serialize(dom, false); + } return mData; } @@ -158,7 +168,7 @@ public class Outcome implements C2KLocalObject { * @return a DOM Document */ public Document getDOM() { - if (dom == null) + if (dom == null && mData != null) try { synchronized (parser) { dom = parser.parse(new InputSource(new StringReader(mData))); @@ -191,6 +201,13 @@ public class Outcome implements C2KLocalObject { return (NodeList)expr.evaluate(getDOM(), XPathConstants.NODESET); } + + public Node getNodeByXPath(String xpathExpr) throws XPathExpressionException { + + XPathExpression expr = xpath.compile(xpathExpr); + return (Node)expr.evaluate(getDOM(), XPathConstants.NODE); + + } static public String serialize(Document doc, boolean prettyPrint) { -- cgit v1.2.3