簡體   English   中英

將字符串從XML轉換為Java代碼

[英]Convert String from a XML to Java Code

我的實際解決方案是向哈希表添加值

private HashMap<String,Sexpr> contexte = new HashMap<String,Sexpr>();

...

this.putVariable("car",Car.CAR);
this.putVariable("cdr",Cdr.CDR);

我想通過使用SAX從XML執行相同的操作

<root>
    <!-- Les types prédéfinis -->
      <type symbole="car" type="expr" class="Car.CAR"/>
      <type symbole="cdr" type="expr" class="Cdr.CDR"/>    
</root>

我可以通過使用attribute.getValue(i).toString()從處理程序(使用Sax)獲取這些值,我希望將訪問我的類Car或Cdr的請求的第二部分的字符串轉換為Java代碼在這個例子中

X.putVariable(attributes.getValue(0).toString, attributes.getValue(2).? );

謝謝您的幫助

因此,據我了解,您想將“ Car.CAR”字符串映射到Car.CAR java類成員。

會員是什么樣的? 真的需要會員嗎? 由於您只是擁有與該類同名的名稱,並且它似乎是一個常量(基於大寫的Java約定),我懷疑不是。

如果只想存儲類引用,則可以使用Class.forName(String cls):Class方法。 該類對象可以存儲在HashMap中。 例:

Class cls = Class.forName("Car");

還要檢查類似的問題,是否就是您想要的: java類字符串

看來您將不得不使用反射來檢索在“ class”屬性中命名的靜態成員( 在Java Reflection API中稱為Field )。 例如(未測試):

public static Object lookupStaticMember(String name) /* throws many */ {
  String classField[] = name.split("\\.");
  Class<?> klass = Class.forName(classField[0]);
  Field field = klass.getField(classField[1]);
  int mods = field.getModifiers();
  if ((Modifier.PUBLIC & mods == 0) || (Modifier.STATIC & mods == 0)) {
    throw new IllegalArgumentException("field " + name + " is not public static");
  }
  return field.get(klass);
}

現在您可以將其用作:

X.putVariable(attributes.getValue(0).toString(),
    (Sexpr) lookupStaticMember(attributes.getValue(2).toString()));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM