Как получить пару значений ключа из XML-документа Java ⇐ JAVA
Как получить пару значений ключа из XML-документа Java
У меня есть XML-документ, из которого я хотел бы получить ключ и значение из этого XML-документа. Однако у меня возникли проблемы с получением обоих. Я понимаю, что мне следует использовать тип данных Map, но не знаю, как это сделать.
Пример:
У меня есть следующий XML-файл:
запрос по электронной почте ответ по электронной почте Очистить запрос Чистый ответ Я хотел бы написать метод, который анализирует этот файл и возвращает мне пару ключ-значение узла (ключа) и значения (значения) XML.
Например, [очередь запросов, запрос по электронной почте] [очередь ответа, ответ по электронной почте] и т. д.
Что у меня есть на данный момент:
public Map parseXML(File f) выдает исключение { Строка xml = FileUtils.readFileToString(f); Фабрика DocumentBuilderFactory = DocumentBuilderFactory.newInstance(); Конструктор DocumentBuilder = Factory.newDocumentBuilder(); Документ document = builder.parse(new InputSource(new StringReader(xml))); Элемент rootElement = document.getDocumentElement(); // Я застрял... вернуть ноль; } Будем очень признательны за любую помощь или содействие, спасибо.
Изменить:
Я провел небольшое исследование и нашел что-то, что выводит мне значения, но только одну из клавиш «Возврат»
@Test public void testConverter() выдает исключение { Строка xml = ("xmlDir/request.xml"); Map карта = ConvertNodesFromXml(xml); for(Map.Entry запись: map.entrySet()) { Строковый ключ = вход.getKey(); Строковое значение = вход.getValue(); logger.debug("Ключ: "+key+" Значение: "+value); } } public static Map ConvertNodesFromXml(String xml) выдает исключение { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(истина); DocumentBuilder db = dbf.newDocumentBuilder(); Документ document = db.parse(xml); Элемент doc = document.getDocumentElement(); logger.debug(doc.getFirstChild()); return createMap(document.getDocumentElement()); } public static Map createMap(Node node) { Map map = new HashMap(); NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Узел currentNode = nodeList.item(i); если (currentNode.hasAttributes()) { for (int j = 0; j < currentNode.getAttributes().getLength(); j++) { Элемент узла = currentNode.getAttributes().item(i); map.put(item.getNodeName(), item.getTextContent()); } } if (node.getFirstChild() != null && node.getFirstChild().getNodeType() == Node.ELEMENT_NODE) { map.putAll(createMap(currentNode)); } else if (node.getFirstChild().getNodeType() == Node.TEXT_NODE) { map.put(node.getLocalName(), node.getTextContent()); } } карта возврата; } Выход:
2015-08-18 15:01:31,651: Ключ: Возвращаемое значение: 136 125 СЕНТЯБРЬ 250 ОКТЯБРЬ 250 125 136 136 125 250 АПРЕЛЬ 136 ИЮНЬ 250 125 МОЖЕТ 136 250 125 136 250 125 ЯНВАРЬ 136 125 250 МАРШИРОВАТЬ 250 АВГУСТ 136 125 3000 136 125 250 ДЕКАБРЬ 136 ИЮЛЬ 125 250 136 125 ФЕВРАЛЬ 250 1500 555-11-2222 125 136 НОЯБРЬ 250 1632 г. 1 22000 1 22000 1970-01-01 555-11-2222 Калифорния
У меня есть XML-документ, из которого я хотел бы получить ключ и значение из этого XML-документа. Однако у меня возникли проблемы с получением обоих. Я понимаю, что мне следует использовать тип данных Map, но не знаю, как это сделать.
Пример:
У меня есть следующий XML-файл:
запрос по электронной почте ответ по электронной почте Очистить запрос Чистый ответ Я хотел бы написать метод, который анализирует этот файл и возвращает мне пару ключ-значение узла (ключа) и значения (значения) XML.
Например, [очередь запросов, запрос по электронной почте] [очередь ответа, ответ по электронной почте] и т. д.
Что у меня есть на данный момент:
public Map parseXML(File f) выдает исключение { Строка xml = FileUtils.readFileToString(f); Фабрика DocumentBuilderFactory = DocumentBuilderFactory.newInstance(); Конструктор DocumentBuilder = Factory.newDocumentBuilder(); Документ document = builder.parse(new InputSource(new StringReader(xml))); Элемент rootElement = document.getDocumentElement(); // Я застрял... вернуть ноль; } Будем очень признательны за любую помощь или содействие, спасибо.
Изменить:
Я провел небольшое исследование и нашел что-то, что выводит мне значения, но только одну из клавиш «Возврат»
@Test public void testConverter() выдает исключение { Строка xml = ("xmlDir/request.xml"); Map карта = ConvertNodesFromXml(xml); for(Map.Entry запись: map.entrySet()) { Строковый ключ = вход.getKey(); Строковое значение = вход.getValue(); logger.debug("Ключ: "+key+" Значение: "+value); } } public static Map ConvertNodesFromXml(String xml) выдает исключение { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(истина); DocumentBuilder db = dbf.newDocumentBuilder(); Документ document = db.parse(xml); Элемент doc = document.getDocumentElement(); logger.debug(doc.getFirstChild()); return createMap(document.getDocumentElement()); } public static Map createMap(Node node) { Map map = new HashMap(); NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Узел currentNode = nodeList.item(i); если (currentNode.hasAttributes()) { for (int j = 0; j < currentNode.getAttributes().getLength(); j++) { Элемент узла = currentNode.getAttributes().item(i); map.put(item.getNodeName(), item.getTextContent()); } } if (node.getFirstChild() != null && node.getFirstChild().getNodeType() == Node.ELEMENT_NODE) { map.putAll(createMap(currentNode)); } else if (node.getFirstChild().getNodeType() == Node.TEXT_NODE) { map.put(node.getLocalName(), node.getTextContent()); } } карта возврата; } Выход:
2015-08-18 15:01:31,651: Ключ: Возвращаемое значение: 136 125 СЕНТЯБРЬ 250 ОКТЯБРЬ 250 125 136 136 125 250 АПРЕЛЬ 136 ИЮНЬ 250 125 МОЖЕТ 136 250 125 136 250 125 ЯНВАРЬ 136 125 250 МАРШИРОВАТЬ 250 АВГУСТ 136 125 3000 136 125 250 ДЕКАБРЬ 136 ИЮЛЬ 125 250 136 125 ФЕВРАЛЬ 250 1500 555-11-2222 125 136 НОЯБРЬ 250 1632 г. 1 22000 1 22000 1970-01-01 555-11-2222 Калифорния
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение