I've played around with ourputting information from xmod with a good deal of success.
There are a couple of modules out there taht would allow you to produc an xml document using T-SQL through database access and the For XML statement.
Xmod only store the form itself in xml form the actually data is stored in the database in value pair groups over 5 tables for size optimisation. XMod combine the dtafrom these diverse location in the programatic logic rather than the database. However, I have a snippet of SQL that will retrieve the value for a given form and xMOD id(record) also it will return addition inforamtion such as user created /modified as well as dates.
/****** Object: StoredProcedure [dbo].[getXMODRecordNText] Script Date: 04/03/2008 15:19:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[getXMODRecordNText]
@formID int
,@record int
AS
DECLARE @sql NVARCHAR(40)
CREATE TABLE #datevalues
(
UserDefinedRowID int NOT NULL
,FieldTitle varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT 'CreatedAt'
,FieldValue nvarchar(2000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
)
CREATE TABLE #alltogether
(
FieldTitle varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT 'CreatedAt'
,FieldValue ntext COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
)
--DROP TABLE #createdtemp
INSERT INTO #datevalues
SELECT XModId AS UserDefinedRowID,'CreatedAt', DateAdded AS FieldValue
FROM KB_XMod_Modules
WHERE (FormId = @formID)
INSERT INTO #datevalues
SELECT XModId AS UserDefinedRowID,'CreatedBy', AddUser AS FieldValue
FROM KB_XMod_Modules
WHERE (FormId = @formID)
INSERT INTO #datevalues
SELECT XModId AS UserDefinedRowID,'ChangedAt', DateModified AS FieldValue
FROM KB_XMod_Modules
WHERE (FormId = @formID)
INSERT INTO #datevalues
SELECT XModId AS UserDefinedRowID,'ChangedBy', UpdateUser AS FieldValue
FROM KB_XMod_Modules
WHERE (FormId = @formID)
INSERT INTO #alltogether
SELECT FieldTitle AS FieldTitle, FieldValue AS FieldValue
FROM #datevalues
Where UserDefinedRowId = @record
INSERT INTO #alltogether
SELECT dbo.KB_XMod_Index_VC50.[key] AS FieldTitle, dbo.KB_XMod_Index_VC50.value AS FieldValue
FROM dbo.KB_XMod_Index_VC50 JOIN
dbo.KB_XMod_Modules ON
dbo.KB_XMod_Index_VC50.XmodID = dbo.KB_XMod_Modules.XModId
WHERE (dbo.KB_XMod_Modules.FormId = @formID) AND dbo.KB_XMod_Index_VC50.XmodID = @record
--UNION
INSERT INTO #alltogether
SELECT dbo.KB_XMod_Index_VC100.[key] AS FieldTitle, dbo.KB_XMod_Index_VC100.value AS FieldValue
FROM dbo.KB_XMod_Index_VC100 JOIN
dbo.KB_XMod_Modules ON dbo.KB_XMod_Modules.XModId = dbo.KB_XMod_Index_VC100.XmodID
WHERE (dbo.KB_XMod_Modules.FormId = @formID) AND dbo.KB_XMod_Index_VC100.XmodID = @record
--UNION
INSERT INTO #alltogether
SELECT dbo.KB_XMod_Index_VC400.[key] AS FieldTitle, dbo.KB_XMod_Index_VC400.value AS FieldValue
FROM dbo.KB_XMod_Index_VC400 JOIN
dbo.KB_XMod_Modules ON dbo.KB_XMod_Modules.XModId = dbo.KB_XMod_Index_VC400.XmodID
WHERE (dbo.KB_XMod_Modules.FormId = @formID) AND dbo.KB_XMod_Index_VC400.XmodID = @record
--UNION
INSERT INTO #alltogether
SELECT dbo.KB_XMod_Index_VC2000.[key] AS FieldTitle, dbo.KB_XMod_Index_VC2000.value AS FieldValue
FROM dbo.KB_XMod_Index_VC2000 JOIN
dbo.KB_XMod_Modules ON dbo.KB_XMod_Modules.XModId = dbo.KB_XMod_Index_VC2000.XmodID
WHERE (dbo.KB_XMod_Modules.FormId = @formID) AND dbo.KB_XMod_Index_VC2000.XmodID = @record
--UNION
INSERT INTO #alltogether
SELECT dbo.KB_XMod_Index_NText.[key] AS FieldTitle, dbo.KB_XMod_Index_NText.value AS FieldValue
FROM dbo.KB_XMod_Index_NText JOIN
dbo.KB_XMod_Modules ON
dbo.KB_XMod_Index_NText.XmodID = dbo.KB_XMod_Modules.XModId
WHERE (dbo.KB_XMod_Modules.FormId = @formID) AND dbo.KB_XMod_Index_NText.XmodID = @record
SELECT FieldTitle, FieldValue From #alltogether
GO
Using this I have been able to feed a single record into a formatted word document I hope this helps
John