To reproduce:
$ head /tmp/foo*bar.xsl
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:variable name="foo" select=""/>
</xsl:stylesheet>
$ xmlstarlet ed -L -d '//xsl:variable' /tmp/foo%20bar.xsl
$ head /tmp/foo*bar.xsl
==> /tmp/foo%20bar.xsl <==
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:variable name="foo" select=""/>
</xsl:stylesheet>
==> /tmp/foo bar.xsl <==
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"/>
(If it wasn't obvious, the expected behaviour is that /tmp/foo%20bar.xsl is overwritten, instead of a new file with a "prettified" file name created.)
This was on Arch Linux, version 1.5.0:
$ pacman -Qs xmlstarlet
local/xmlstarlet 1.5.0-1
A set of tools to transform, query, validate, and edit XML documents
$ xmlstarlet --version
1.5.0
compiled against libxml2 2.9.1, linked with 20902
compiled against libxslt 1.1.28, linked with 10128