как конвертировать XML в список <Map> - PullRequest
1 голос
/ 29 ноября 2011

У меня есть данные XML, как показано ниже в примере.

<EMP>
   <PERSONAL_DATA>
     <EMPLID>AA0001</EMPLID>
     <NAME>Adams<NAME>
   </PERSONAL_DATA>
   <PERSONAL_DATA>
     <EMPLID>AA0002<EMPLID>
     <NAME>Paul<NAME>
    </PERSONAL_DATA>
</EMP>

Я хочу хранить информацию о каждом сотруднике на карте (KEY, VALUE), KEY = tagname, VALUE = value и хочу создать LIST для всех сотрудников, использующих XPATH в Java. как я сделаю? Пожалуйста, предложите Спасибо

Ответы [ 3 ]

3 голосов
/ 29 ноября 2011

Вы можете использовать JAXB.

Я вижу как минимум 2 решения. Во-первых, создайте класс PersonalData с полями emplid и name. Пометьте их аннотациями @XmlElement. Разбор вашего XML. Это создаст коллекцию экземпляров PersonalData. Теперь переберите эту коллекцию и создайте карту, если она вам действительно нужна.

Но вы можете отобразить XML на карту напрямую. Посмотрите на следующий блог .

1 голос
/ 29 ноября 2011

вы можете использовать обычные jaxp вещи или попробовать Groovy:

String xml='''<EMP>
   <PERSONAL_DATA>
     <EMPLID>AA0001</EMPLID>
     <NAME>Adams</NAME>
   </PERSONAL_DATA>
   <PERSONAL_DATA>
     <EMPLID>AA0002</EMPLID>
     <NAME>Paul</NAME>
    </PERSONAL_DATA>
</EMP>
'''
Node parsed=new XmlParser().parseText(xml)
List<Map> list=[]
parsed.each {
    Map<String,String> map=[:]
    it.children().each {
        map[it.name()]=it.value()[0]
        println "${it.name()} ${it.value()[0]}"
    }
    list.add(map)
}
println list
0 голосов
/ 29 ноября 2011

Зачем использовать XPATH?`String expression =" // EMP / PERSONAL_DATA / * ";
XPathExpression expr = xpath.compile (expression);

     Object result = expr.evaluate(doc, XPathConstants.NODESET); 
     NodeList nodes = (NodeList) result;  

     List<Map> list = new ArrayList<Map>();

     for (int i = 0; i < nodes.getLength(); i++) {  
           Node node = nodes.item(i);
           Map<String,String> nodeMap = new HashMap<String,String>();
           if (node.getNodeName()!=null){                  
              nodeMap.put(node.getNodeName(), node.getTextContent());
              list.add(nodeMap);
           }
    }`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...