问题描述
我的xml就像<value>value1</value>
我想使用commons-digester解析它,并希望将“ value1”作为String对象
1楼
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);
}
}
2楼
我认为不可能将“ 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>