The following xmlstarlet command would set the values of each text-only node in your document to an empty string. It would additionally preserve whitespaces between nodes (not do pretty-printing) and omit adding an XML declaration tag (<?xml...?>):
xmlstarlet ed -P -O -u '//child::text()' -v '' file.xml
Given your example document in file.xml, this would produce
<tag1><tag2><tag2-5></tag2-5><tag3></tag3></tag2></tag1>
Without the -P and -O options:
<?xml version="1.0"?>
<tag1>
<tag2>
<tag2-5></tag2-5>
<tag3></tag3>
</tag2>
</tag1>
One could also use
xmlstarlet ed -d '//child::text()' file.xml
to delete the values rather than setting them to an empty string, but that would generate nodes with no value (rather than nodes with an empty value):
<?xml version="1.0"?>
<tag1>
<tag2>
<tag2-5/>
<tag3/>
</tag2>
</tag1>
Adding the -P and -O options would generate
<tag1><tag2><tag2-5/><tag3/></tag2></tag1>
Depending on what it is that you actually want to do, one could use the el (elements) sub-command of xmlstarlet to get another representation of the document structure:
xmlstarlet el file.xml
The output for your example:
tag1
tag1/tag2
tag1/tag2/tag2-5
tag1/tag2/tag3
See also xmlstarlet el --help.