读取XML中的标签然后将数据设置为不同的对象Digester Common

时间:2013-10-09 18:48:36

标签: java xml apache-commons-digester

我有以下XML

<data>
  <name> James </name>
  <age> 25 </age>
</data>

我尝试将名称设为ClassA,将年龄设为ClassB

可以使用Diggester执行此操作吗?

2 个答案:

答案 0 :(得分:1)

如果你想获取XML值并将它们存储到一个类中,我可以建议两个选项。

  1. SAXParser
  2. JAXB
  3. SAXParser是一个XML解析器,它将通过回调方法为您提供数据。您现在可以确切地知道正在处理的标记,并从该标记中获取数据。

    第二个是JAXB Java Architecture for XML Binding

      

    用于XML绑定的Java体系结构(JAXB)允许Java开发人员进行映射   Java类到XML表示。 JAXB提供两个主要功能:   能够将Java对象编组为XML和反向,即   将XML解组回Java对象中   --Wikipedia

    现在剩下的是什么适合您的需求:)

答案 1 :(得分:0)

ClassA和ClassB的实例来自哪里?如果它们在您调用消化器之前存在,那么您可以使用自定义规则执行此操作,如下所示:

String xml = "<data>"
    + "<name>James</name>"
    + "<age>25</age>"
    + "</data>";

final ClassA ca = new ClassA();
final ClassB cb = new ClassB();

Digester digester = new Digester();
digester.addRule("data/name", new Rule() {
  @Override
  public void body(String namespace, String name, String text) throws Exception {
    ca.setName(text);
  }
});
digester.addRule("data/age", new Rule() {
  @Override
  public void body(String namespace, String name, String text) throws Exception {
    cb.setAge(Integer.parseInt(text));
  }
});
digester.parse(new StringReader(xml));

如果它们是由XML解析的其他部分创建的,则需要了解有关整体问题的更多信息。

干杯