Парсим, модифицируем и сохраняем XML с помощью Java

Предположим у нас есть 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 документ.