Use o XSL para realizar a transformação no formato exato que você precisa; por exemplo,
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:strip-space elements="*" />
<xsl:template match="/ReportDetails">
<xsl:value-of select="Date"/><xsl:text>|</xsl:text>
<xsl:value-of select="CaseNo"/><xsl:text>|</xsl:text>
<xsl:apply-templates select="UserDetails" />
</xsl:template>
<xsl:template match="/ReportDetails/UserDetails">
<xsl:value-of select="FirstName"/><xsl:text>|</xsl:text>
<xsl:value-of select="Surname"/><xsl:text>|</xsl:text>
</xsl:template>
<!-- etc -->
</xsl:stylesheet>
Em seguida, é dado o exemplo acima (por exemplo, em foo.xsl para transformar o documento xml original foo.xml):
$ xsltproc foo.xsl foo.xml
08/08/2012|13030903|John|Perry|
(O diabo está nos detalhes do xsl ... existem várias maneiras de implementar isso ...)