У меня есть документ XML, из которого я хотел бы получить ключ и значение из этого XML-документа. Однако у меня проблемы с получением обоих, я понимаю, что должен использовать тип данных Карты, но я не уверен, как это сделать.Как получить пару ключевых значений из документа XML Java
Пример:
У меня есть следующий XML-файл:
<?xml version="1.0"?>
<config>
<Request name="ValidateEmailRequest">
<requestqueue>emailrequest</requestqueue>
<responsequeue>emailresponse</responsequeue>
</Request>
<Request name="CleanEmail">
<requestqueue>Cleanrequest</requestqueue>
<responsequeue>Cleanresponse</responsequeue>
</Request>
</config>
Я хотел бы написать метод, который анализирует этот файл и возвращает мне ключ значение пары узла (ключ) и значение (значение) XML.
Такие, как [RequestQueue, emailrequest] [responsequeue, EmailResponse], и т.д ...
Что я в настоящее время:
public Map<String, String> parseXML(File f) throws Exception {
String xml = FileUtils.readFileToString(f);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(xml)));
Element rootElement = document.getDocumentElement();
// I'm stuck...
return null;
}
Любая помощь или помощь будет высоко ценится, спасибо.
Edit:
Я сделал некоторые исследования, и я нашел то, что будет печатать меня значения, но только 1 из клавиш "Return"
@Test
public void testConverter() throws Exception {
String xml = ("xmlDir/request.xml");
Map<String,String> map = convertNodesFromXml(xml);
for(Map.Entry<String, String> entry: map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
logger.debug("Key: "+key+" Value: "+value);
}
}
public static Map<String, String> convertNodesFromXml(String xml) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(xml);
Element doc = document.getDocumentElement();
logger.debug(doc.getFirstChild());
return createMap(document.getDocumentElement());
}
public static Map<String, String> createMap(Node node) {
Map<String, String> map = new HashMap<String, String>();
NodeList nodeList = node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
if (currentNode.hasAttributes()) {
for (int j = 0; j < currentNode.getAttributes().getLength(); j++) {
Node item = 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());
}
}
return map;
}
Выход:
2015-08-18 15:01:31,651 : Key: Return Value:
136
125
SEPTEMBER
250
OCTOBER
250
125
136
136
125
250
APRIL
136
JUNE
250
125
MAY
136
250
125
136
250
125
JANUARY
136
125
250
MARCH
250
AUGUST
136
125
3000
136
125
250
DECEMBER
136
JULY
125
250
136
125
FEBRUARY
250
1500
555-11-2222
125
136
NOVEMBER
250
1632
1
22000
1
22000
1970-01-01
555-11-2222
CA
JAX-B работает хорошо. Это может быть не так быстро, как некоторые другие синтаксические анализаторы, но может быстро встать и работать. –