Implemented Xml.getFromString()
This commit is contained in:
parent
d5ea622ad4
commit
f74c21d405
2 changed files with 36 additions and 0 deletions
|
@ -6,6 +6,7 @@ import java.util.*;
|
||||||
|
|
||||||
import javax.xml.parsers.*;
|
import javax.xml.parsers.*;
|
||||||
import org.w3c.dom.*;
|
import org.w3c.dom.*;
|
||||||
|
import org.xml.sax.InputSource;
|
||||||
|
|
||||||
import helma.objectmodel.*;
|
import helma.objectmodel.*;
|
||||||
import helma.util.SystemProperties;
|
import helma.util.SystemProperties;
|
||||||
|
@ -75,6 +76,15 @@ public class XmlConverter implements XmlConstants {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public INode convertFromString( String xml, INode helmaNode ) throws RuntimeException {
|
||||||
|
Document document = XmlUtil.parse (new InputSource (new StringReader (xml)));
|
||||||
|
if ( document!=null && document.getDocumentElement()!=null ) {
|
||||||
|
return convert( document.getDocumentElement(), helmaNode, new HashMap() );
|
||||||
|
} else {
|
||||||
|
return helmaNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public INode convert( Element element, INode helmaNode, Map nodeCache ) {
|
public INode convert( Element element, INode helmaNode, Map nodeCache ) {
|
||||||
offset++;
|
offset++;
|
||||||
// previousNode is used to cache previous nodes with the same prototype
|
// previousNode is used to cache previous nodes with the same prototype
|
||||||
|
|
|
@ -39,6 +39,7 @@ public class DomExtension extends Extension {
|
||||||
globalXml.putHiddenProperty ("write", new XmlWrite ("write", evaluator, fp));
|
globalXml.putHiddenProperty ("write", new XmlWrite ("write", evaluator, fp));
|
||||||
globalXml.putHiddenProperty ("writeToString", new XmlWriteToString ("writeToString", evaluator, fp));
|
globalXml.putHiddenProperty ("writeToString", new XmlWriteToString ("writeToString", evaluator, fp));
|
||||||
globalXml.putHiddenProperty ("get", new XmlGet ("get", evaluator, fp));
|
globalXml.putHiddenProperty ("get", new XmlGet ("get", evaluator, fp));
|
||||||
|
globalXml.putHiddenProperty ("getFromString", new XmlGetFromString ("getFromString", evaluator, fp));
|
||||||
go.putHiddenProperty ("Xml", globalXml);
|
go.putHiddenProperty ("Xml", globalXml);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,6 +176,31 @@ public class DomExtension extends Extension {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class XmlGetFromString extends BuiltinFunctionObject {
|
||||||
|
XmlGetFromString(String name, Evaluator evaluator, FunctionPrototype fp) {
|
||||||
|
super(fp, evaluator, name, 1);
|
||||||
|
}
|
||||||
|
public ESValue callFunction(ESObject thisObject, ESValue[] arguments) throws EcmaScriptException {
|
||||||
|
if ( arguments==null || arguments.length==0 )
|
||||||
|
throw new EcmaScriptException("Xml.getFromString() needs an XML string as parameter");
|
||||||
|
try {
|
||||||
|
XmlConverter converter;
|
||||||
|
if ( arguments.length>1 ) {
|
||||||
|
converter = new XmlConverter (arguments[1].toString());
|
||||||
|
} else {
|
||||||
|
converter = new XmlConverter ();
|
||||||
|
}
|
||||||
|
INode node = new helma.objectmodel.db.Node ( (String)null, (String)null, this.evaluator.engine.getApplication().getWrappedNodeManager() );
|
||||||
|
INode result = converter.convertFromString (arguments[0].toString(),node);
|
||||||
|
return this.evaluator.engine.getNodeWrapper(result);
|
||||||
|
} catch ( NoClassDefFoundError e ) {
|
||||||
|
throw new EcmaScriptException("Can't load dom-capable xml parser.");
|
||||||
|
} catch ( RuntimeException f ) {
|
||||||
|
throw new EcmaScriptException(f.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue