I have created a trigger to audit changes to a table:

<!-- language: lang-sql -->

    CREATE TRIGGER [dbo].[iudt_AutoAuditChanges] 
       ON  dbo.CPTCategoryMaster
       AFTER INSERT,DELETE,UPDATE
    AS 
    BEGIN
    	SET NOCOUNT ON;
    	
    	Declare @v_AuditID bigint
    	
    	IF OBJECT_ID('dbo.AutoAudit','U') IS NULL BEGIN
    		CREATE TABLE [dbo].[AutoAudit]
    		(	[AuditID] bigint identity,
    			[AuditDate] DateTime,
    			[AuditUserName] varchar(128),
    			[TableName] varchar(128) NULL,
    			[OldContent] XML NULL,
    			[NewContent] XML NULL
    		)
    		
    		ALTER TABLE dbo.AutoAudit ADD CONSTRAINT
    		PK_AutoAudit PRIMARY KEY CLUSTERED 
    		(
    			[AuditID]
    		) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    		
    		CREATE NONCLUSTERED INDEX [idx_AutoAudit_TableName_AuditDate] ON [dbo].[AutoAudit] 
    		(   [TableName] ASC,
    			[AuditDate] ASC
    		)WITH (STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    	END
    	
    	Select * Into #AuditDeleted from deleted
    	Select * Into #AuditInserted from inserted
    	
    	While (Select COUNT(*) from #AuditDeleted) > 0 OR (Select COUNT(*) from #AuditInserted) > 0
    	Begin
    	
    		INSERT INTO [dbo].[AutoAudit]
    			( [AuditDate], [AuditUserName], [TableName], [OldContent], [NewContent])
    		SELECT 
    			GETDATE(),
    			SUSER_NAME(),
    			[TableName]=object_name([parent_obj]),
    			[OldContent]=CAST((SELECT TOP 1 * FROM #AuditDeleted D FOR XML RAW) AS xml),
    			[NewContent]=CAST((SELECT TOP 1 * FROM #AuditInserted I FOR XML RAW) AS xml)
    		FROM sysobjects 
    		WHERE
    			[xtype] = 'tr' 
    			and [name] = OBJECT_NAME(@@PROCID)
    		
    		Set @v_AuditID = SCOPE_IDENTITY()
    		
    		Delete from AutoAudit
    		Where AuditID = @v_AuditID
    			AND Convert(varchar(max),oldContent) = Convert(varchar(max),NewContent)
    		
    		Delete top(1) from #AuditDeleted
    		Delete top(1) from #AuditInserted
    	
    	End
    END

This produces XML data like:

<!-- language: lang-none -->

    row CPTCategoryId="1" CPTCategoryName="NEW CHARGE" Remarks="" Status="1" CreatedBy="11" CreatedDate="2014-05-01T12:50:16.947" ModifiedBy="11" ModifiedDate="2014-05-01T14:20:47.793" LockVersion="0" 

How can I separate the column data (`CPTCategoryId, CPTCategoryName, Remarks`... etc) for display in a grid view? Or is there a better way to implement this requirement?