You can keep a stack of the current level where you are
in the XML file. When you get a start tag, push the
tag onto the stack; when you get to the end of that tag,
pop the tag off the stack. You can use this to define a
tree structure of sorts.
Another option would be to use the "Tree" Style of XML::Parser.
Read the docs for that.
A final option, and a good one, is to use XML::Simple,
which may work for you:
It loads the data into a tree structure, which may or may
not work exactly how you want it.
Or (finally again) you could look into some of the other
tree-processing XML modules, like XML::DOM and XML::Twig.
They may be overkill for your purposes, though.