当前位置: 代码迷 >> java >> 用消化器解析
  详细解决方案

用消化器解析

热度:18   发布时间:2023-07-27 09:12:48.0

我的xml就像<value>value1</value>我想使用commons-digester解析它,并希望将“ value1”作为String对象

Lukasz回答,如果您不想创建另一个对象来保存该值,则可以将StringBuilder推入堆栈,然后使用addCallMethod调用append 为了清楚起见,我在此处复制了代码:

public class StringExtractor {
    public static void main(String[] args) throws IOException, SAXException {
        final String xml = "<value>value1</value>";

        final Digester digester = new Digester();
        digester.push(new StringBuilder());
        digester.addCallMethod("*/value", "append", 1);
        digester.addCallParam("*/value", 0);

        final String value = digester.parse(new StringReader(xml)).toString();
        System.out.println(value);
    }
}

我认为不可能将“ value1”直接加载到String实例中(通过addObjectCreate ),因为String是不可变的。 取而代之的是,我强迫摘要器调用一个方法。 简短样本:

import java.io.File;
import org.apache.commons.digester.Digester;

public class Tester {
    public static void main(String[] args) throws Exception {
        Tester t = new Tester();
        t.go();
    }

    private String read;

    void go() throws Exception {
        Digester digester = new Digester();
        digester.push(this);
        digester.addCallMethod("value", "readString", 1);
        digester.addCallParam("value", 0);
        digester.parse(new File("tester.xml"));
        System.out.println("string: " + read );
    }

    public void readString(String a) {
        this.read = a;
    }
}

tester.xml

<?xml version="1.0" encoding="UTF-8"?>
<value>value1</value>
  相关解决方案