Предположим у нас есть XML следующего содержания:
1 2 3 4 5 |
<?xml version="1.0" encoding="UTF-8"?> <GAME name="Первая игра" description="Длинное предлинное описание игры..."> <LEVEL name="Уровень 1" description="описание уровня 1"></LEVEL> <LEVEL name="Уровень 2" description="описание уровня 2"></LEVEL> </GAME> |
Анализировать документ будем с помощью DOM API.
1 2 3 |
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = fact.newDocumentBuilder(); Document doc = builder.parse("file.xml");; |
Метод parse() построит дерево объектов и вернет ссылку на него в виде объекта Document.
1 |
NodeList list = doc.getElementsByTagName("GAME"); |
Пробуем получить главную ветвь
1 2 3 4 5 |
if(list.getLength() == 0) { System.out.println("Невозможно распознать документ"); return false; } |
Если же там ничего нет значит это не наш документ 🙁
Теперь преступим к обработке данных, наша задача пробежать по всем узлам и записать данные к себе, я буду записывать это в свои собственные объекты “MyLevel” и “MyGame”
1 2 3 4 5 6 7 8 |
Node freeNode = null; freeNode = list.item(0); // Корневой узел он же GAME while(freeNode!=null) { GoNodeGo(freeNode); freeNode = freeNode.getNextSibling(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void GoNodeGo(Node node) { if( (node == null) || (node.getNodeType() != Node.ELEMENT_NODE) ) return; String s = node.getNodeName(); if(s.equals("LEVEL")) { LoadLevel(node); } else if(s.equals("GAME")) { LoadGame(node); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void LoadLevel(Node levelNode) { Element element = (Element) levelNode; level = new MyLevel(); level.SetName(element.getAttribute("name")); level.SetDescription(element.getAttribute("descriptions")); Editor_creobit.game.levelsListAll.add(jinlevel); if(levelNode.hasChildNodes()) { Node node = levelNode.getFirstChild(); while(node!=null) { GoNodeGo(node); node = node.getNextSibling(); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void LoadGame(Node gameNode) { Element element = (Element) gameNode; MyGame.SetName(element.getAttribute("name")); MyGame.SetDescription(element.getAttribute("descriptions")); if(gameNode.hasChildNodes()) { Node node = gameNode.getFirstChild(); while(node!=null) { GoNodeGo(node); node = node.getNextSibling(); } } } |
Вот таким образом можно прочитать XML документ.