Предположим у нас есть XML следующего содержания:
<?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.
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = fact.newDocumentBuilder();
Document doc = builder.parse("file.xml");;
Метод parse() построит дерево объектов и вернет ссылку на него в виде объекта Document.
NodeList list = doc.getElementsByTagName("GAME");
Пробуем получить главную ветвь
if(list.getLength() == 0)
{
System.out.println("Невозможно распознать документ");
return false;
}
Если же там ничего нет значит это не наш документ 🙁
Теперь преступим к обработке данных, наша задача пробежать по всем узлам и записать данные к себе, я буду записывать это в свои собственные объекты “MyLevel” и “MyGame”
Node freeNode = null;
freeNode = list.item(0); // Корневой узел он же GAME
while(freeNode!=null)
{
GoNodeGo(freeNode);
freeNode = freeNode.getNextSibling();
}
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);
}
}
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();
}
}
}
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 документ.