gpt4 book ai didi

java - 消化器 : Extracting node name for a map

转载 作者:行者123 更新时间:2023-11-29 06:21:41 28 4
gpt4 key购买 nike

我的问题与这个问题很接近:Digester: Extracting node name

即使有答案,我也找不到。

这是我的 xml 文件(来自 smartgwt RestDataSource POST):

<data>
<isc_OID_14>
<attribute1>value1</attribute1>
<attribute2>value2</attribute2>
</isc_OID_14>
</data>

我想使用 Commons Digester 创建以下 map :{attribute1=value1, attribute2=value2}

我已经有了这些行:

digester = new Digester();
digester.addObjectCreate("data", HashMap.class);
// some "put" rules matching something like data/*
return digester.parse(myFile);

我不知道 <data><sourceId /></data> 中的列表和标签名称. isc_OID_14attribute1可以命名为 foobar 或 id 或 attribute335...

最佳答案

我想这就是你想要的:

import java.io.*;
import java.util.*;
import org.apache.commons.digester.*;

public class DigestToMap {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
File file = new File("digestme.xml");
Digester digester = new Digester();
digester.setRules(new ExtendedBaseRules());
digester.addObjectCreate("data", HashMap.class);
digester.addRule("data/?", new Rule() {
@Override public void end(String nspace, String name) {
((HashMap<String,String>)getDigester().peek()).put("[ID]", name);
}
});
digester.addRule("*", new Rule() {
@Override public void body(String nspace, String name, String text) {
((HashMap<String,String>)getDigester().peek()).put(name, text);
}
});
Map<String,String> map = (Map<String,String>) digester.parse(file);
System.out.println(map);
}
}

基本上它使用 ExtendedBaseRules 进行通配符匹配。

有3条规则:

  • 数据上,ObjectCreate一个HashMap
  • data/?(data 的直接子节点)上,映射 [ID]=name(使此 Rule 成为空操作,如果不需要)
  • *(其他所有内容)上,映射 name=text

在我的机器上,打印出:

{[ID]=isc_OID_14, attribute1=value1, attribute2=value2}

API 链接

关于java - 消化器 : Extracting node name for a map<tagname, 值>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2764382/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com