@Otakukz17

Как спасить xml в java по аттрибуту тэга?

Добрый день

Возникла проблема. Есть сервис, который возвращает xml следующего вида
<?xml version="1.0" encoding="windows-1251"?>
<response>
	<status group="Group1">OK</status>
	<status group="Group2">OK</status>
	<status group="Group3">InProgress</status>
	<status group="Group4">ToDo</status>
	<status group="Group5">Closed</status>
	<status group="Group6">Done</status>
	<status group="Group7">OK</status>
	<status group="Group8">OK</status>
	<status group="Group9">OK</status>
	<status group="Group10">OK</status>
	<status group="Group11">OK</status>
	<status group="Group12">OK</status>
	<status group="Group13">OK</status>
	<status group="Group14">OK</status>
</response>

Задача в том, чтобы для каждой группы получить статус
Но у меня не получается правильно спарсить значения. Регулярка и JavaDOM возвращает только первое значение. Ниже мой вариант решения:
HashMap<String,String> map = new HashMap<String,String>();
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();

            StringBuilder xmlStringBuilder = new StringBuilder();
            xmlStringBuilder.append(response); // сюда подставляю ответ
            ByteArrayInputStream input = new ByteArrayInputStream(xmlStringBuilder
                    .toString()
                    .getBytes("UTF-8"));
            Document doc = builder.parse(input);
            doc.getDocumentElement().normalize();
            NodeList nodeList = doc.getElementsByTagName("status");
            for(int temp = 0; temp < nodeList.getLength(); temp++){
                Node nNode = nodeList.item(temp);
                System.out.println(nNode.getTextContent());
                if(nNode.getNodeType() == Node.ELEMENT_NODE) {
                    System.out.println("MAP BUILDING");
                    Element eElement = (Element) nNode;
                    System.out.println(eElement.getTextContent());
                    map.put(eElement.getAttribute("group"),
                            eElement.getElementsByTagName("status").item(0).getTextContent());
                    System.out.println("Group: " + eElement.getAttribute("group"));
                    System.out.println("Status: " + eElement.getElementsByTagName("status").item(0).getTextContent());
                }
            }

        } catch(Exception e){
            System.out.println("Exception"+e);

        }


Думаю удобнее будет все в HashMap засунуть чтобы потом использовать в проекте.
Спасибо заранее
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
@Otakukz17 Автор вопроса
Похоже что я разобрался.
Следующий код парсит и записывает в хэшмапу что нужно:
HashMap<String,String> map = new HashMap<String,String>();
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();

            StringBuilder xmlStringBuilder = new StringBuilder();
            xmlStringBuilder.append(response); // сюда подставляю ответ
            ByteArrayInputStream input = new ByteArrayInputStream(xmlStringBuilder
                    .toString()
                    .getBytes("UTF-8"));
            Document doc = builder.parse(input);
            NodeList nodeList = doc.getElementsByTagName("status");
            for(int temp = 0; temp < nodeList.getLength(); temp++){
                Node nNode = nodeList.item(temp);
                if(nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;
                    map.put(eElement.getAttribute("group"),
                            eElement.getTextContent());
                }
            }

        } catch(Exception e){
            System.out.println("Exception"+e);

        }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы