将String从XML转换为Java代码

时间:2012-03-29 16:03:14

标签: java xml

我的实际解决方案是向hashmap添加值

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>

我可以使用我的处理程序(使用Sax)获取这些值 attributes.getValue(i).toString(),我想在我的请求的第二部分将我的字符串转换为Java代码,以便在此示例中访问我的类Car或Cdr

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

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

所以我理解你想要将“Car.CAR”字符串映射到Car.CAR java类成员。

会员喜欢什么?会员真的需要吗?因为你只是拥有与类相同的名称,它似乎是一个常量(基于大写的java惯例)我怀疑不是。

如果您只想存储类引用,那么您可以使用Class.forName(String cls):Class方法。该类对象可以存储在HashMap中。例如:

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

如果这是您想要的,请检查此类似问题:java String to class

答案 1 :(得分:0)

看起来你必须使用反射来检索在“class”属性中命名的静态成员(称为Field in the Java reflection APIs)。例如(未经测试):

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()));