Reputation: 317
I have a string of XML as
<ShowPercentage>
<SPGLevel>
<Level> 1 </Level>
<percentage>40</percentage>
</SPGLevel>
<SPGLevel>
<Level> 2 </Level>
<percentage>60</percentage>
</SPGLevel>
</ShowPercentage>
The SPG Level is repeatable. This is a map with key=Level and value=percentage
I want to parse this XML using Digester. Can anyone help me get started?
Upvotes: 4
Views: 1509
Reputation: 1013
final String root= "root/";
final String out= "elementOut/";
final String in= "elementIn/";
final String id = "id";
final String NAME = "name";
String namespace = reg.getFilename();
final Digester digester = new Digester();
digester.setValidating(false);
digester.addObjectCreate(root, HashMap.class);
digester.addCallMethod(root+ out, "put", 2);
digester.addCallParam(root+ out, 0, ID);
digester.addObjectCreate(root+ out, ArrayList.class);
digester.addCallMethod(root+ out + in, "add", 1);
digester.addCallParam(root+ out + in, 0, name);
digester.addCallParam(root+ out, 1, true);
Map<String, List<String>> map = digester.<Map<String, List<String>>> parse(reg
.getInputStream());
corresponding xml matches map of key as a string and value as list of string.
<root>
<elementOut id="key1">
<elementIn name="value1" />
</elementOut>
<elementOutid="key2">
<elementIn name="value1" />
<elementIn name="value2" />
</elementOut>
</root>
Upvotes: 1
Reputation: 317
digester.addObjectCreate("MerchRecomExitPopupControl/ShowPercentage", HashMap.class);
digester.addCallMethod("MerchRecomExitPopupControl/ShowPercentage/SPGLevel", "put", 2);
digester.addCallParam("MerchRecomExitPopupControl/ShowPercentage/SPGLevel/Level", 0);
digester.addCallParam("MerchRecomExitPopupControl/ShowPercentage/SPGLevel/Percentage", 1);
digester.addSetNext("MerchRecomExitPopupControl/ShowPercentage", "setShowPercentMap");
setShowPercentMap
- set this in a helper class, Map of strings
Upvotes: 1
Reputation: 7662
The answer may look like the following code, but I didn't test this:
public class SampleDigester
{
private Map<String, String> map = new HashMap<String, String>();
public void run() throws IOException, SAXException {
Digester digester = new Digester();
digester.push(this);
digester.addCallMethod("ShowPercentage/SPGLevel", "addKey", 2);
digester.addCallParam("ShowPercentage/SPGLevel/Level", 0);
digester.addCallParam("ShowPercentage/SPGLevel/percentage", 1);
digester.parse("input.xml");
}
public void addKey(String key, String value) {
map.put(key, value);
}
}
Upvotes: 3
Reputation: 1504
I should suggest that you should go with castor mapping.
For Castor mapping you should follow below steps:
After all done write down below code for unmarshalling.
private String fileLoadPath="conf/Configuration.xml";
private String mappingPath="conf/mapping.xml";
Mapping mapping = new Mapping();
mapping.loadMapping(mappingPath);
Configuration configuration = (Configuration)new Unmarshaller(mapping).unmarshal(fileLoadPath);
Upvotes: 0
Reputation: 1568
might not be exactly what you want, but will get you started
http://www.hiteshagrawal.com/javascript/javascript-parsing-xml-in-javascript
Upvotes: -1