2013-04-17 200 views
2

的JavaScript這種使用javax.script.*XML解析器與從Java

基於

DOMParser is not part of JS but part of Mozilla browser which makes it available to script in the browser using XPConnect. An alternative would be to use built-in E4X.

E4X is implemented in Rhino (JavaScript engine written in Java).

嘗試:

import java.io.IOException; 
import java.util.Map; 

import javax.script.Bindings; 
import javax.script.ScriptContext; 
import javax.script.ScriptEngine; 
import javax.script.ScriptEngineManager; 
import javax.script.ScriptException; 

public class heshCode { 

    public static void main(String[] args) throws IOException { 
     scripter(); 
    } 

    public static void scripter() { 
     try { 

      String Jscript = "var map = {};" + "\n"+ 
         "var x = new XML();" + 
         "var person = new XML('<person><name>Bob Smith</name><likes><os>Linux</os><browser>Firefox</browser><language>JavaScript</language><language>Python</language></likes></person>');" + 
         "map[1]=person.name;" + 
         "map[2]=person['name'];" + 
         "map[3]=person.likes.browser;" + 
         "map[4]=person['likes'].browser;"; 
      ScriptEngineManager manager = new ScriptEngineManager(); 
      ScriptEngine rhinoEngine = manager.getEngineByName("javascript"); 
      Bindings bindings = rhinoEngine 
        .getBindings(ScriptContext.ENGINE_SCOPE); 
      rhinoEngine.eval(Jscript.toString()); 

      @SuppressWarnings("unchecked") 
      Map<String, String> m = (Map<String, String>) bindings.get("map"); 
      for (Map.Entry<String, String> entry : m.entrySet()) { 
       System.out.println(entry.getKey() + " = " + entry.getValue()); 
      } 
     } catch (ScriptException e) { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

但我發現了錯誤:

sun.org.mozilla.javascript.EcmaError: ReferenceError: "XML" is not defined. (<Unknown source>#2) in <Unknown source> at line number 2 

任何想法/建議?

+0

這是一個JavaScript問題,與Java無關,請在瀏覽器中嘗試它「ReferenceError:XML is not defined」 –

+1

@BenjaminGruenbaum:實際上,它*有*與Java有關,因爲他正在執行JavaScript在JVM中(來自一些Java代碼)。 –

+1

@JoachimSauer然而,他得到的錯誤是獨立的。他會得到完全相同的錯誤運行JS原生 –

回答