Я пытаюсь разработать SOA-клиент & парсер, который является специфическим для нашего проекта. Я уже завершил работу с клиентом, и он вызывает много видов (несколько разных) SOAP-сервисов и получает ответ SOAP-сообщения в формате XML.Java: проанализируйте XML и привяжите все содержимое данных к карте <K, V>
Моя цель:
Получить значение любого узла или атрибута из любого типа коллекции, и она должна быть разработана для всех моих ответов веб-служб.
, например. я буду называть вроде как это:
String h1 = collection.get("html/body/h1");
и значение h1 должно быть 'StackOverflow' и происходят из:
<html>
<head></head>
<body>
<h1>StackOverflow</h1>
<p>XML parsing in Java</p>
</body>
</html>
т.д.
Мой подход:
сейчас У меня есть ответное сообщение. Я хочу проанализировать его и присвоить всем значениям узла (и атрибута) коллекции (карте) и получить данные из этой коллекции. Ключ коллекции (Карта) ключ будет путь узла, а значение будет значением узла или атрибута.
например
<MethodResponse xmlns="any.xmlns">
<MethodResult>any value</MethodResult>
<Node1>
<Node2>
<Node3>
node3 value is here
<Node3>
</Node2>
</Node1>
<respCode>99</respCode>
<respNote>any value</respNote>
</MethodResponse>
Если мне нужно respCode здесь, я мог бы назвать это таким образом:
String respCode = map.get("/MethodResponse/respCode");
или, к node3:
String node3Value = map.get("/MethodResponse/Node1/Node2/Node3");
как XPath. Но я не хочу никакого сопоставления или какого-либо Java-класса. Я просто хочу получить доступ к значению узлов (или атрибутов) из его пути.
критерииуспеха:
Он работает для этих и нескольких различных сообщений SOAP:
- http://www.w3schools.com/xml/note.xml
- http://www.w3schools.com/xml/cd_catalog.xml
- http://www.w3schools.com/xml/simple.xml
- http://msdn.microsoft.com/en-us/library/ms762271%28v=vs.85%29.aspx
И мои вопросы:
- мой подход верно?
- Если да, то как я могу это сделать? Есть ли какой-либо рабочий код или учебник?
- Если нет, как я могу это сделать?
это не так просто, как вы думаете, это прямо сейчас. Вы будете сталкиваться элементы, которые имеют тот же путь - например, html/body/table/tr/td - и поэтому ваша идея карты не будет работать –
Лучше сериализовать/несериализовать в набор объектов с иерархией. Google Java JAXB. – Archer
@archer, к сожалению, я должен делать он без использования какого-либо класса/объекта. – OguzOzkeroglu