Search code examples
javaxmlapache-commons-digester

Parse a map in digester


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?


Solution

  • 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);
      }
    
    }