我的要求是根据xsd和一组与xsd中不同节点相关联的查询来加载生成xml文件。 它还需要对数据进行分页,以便将xml拆分为多个文件,但保持顶级节点的完整性(我的意思是在根之后的下一级)。 我的方法是使用数据加载数据集。如果不需要分页则一切正常,但是当包含分页时,我获得了顶级节点下所有级别的孤立节点。我认为拥有所有关系的数据集会阻止孤立行。 有没有办法确保结果没有孤儿?
这是我的代码:
for (int page = 1; page <= pages; page++)
{
foreach (DataTable dataTable in dataSetSchema.Tables)
{
if (dataTable.TableName == releasedOutput.PartitionNode)
{
var pagedSql = @"WITH pagingOutputSchema As ( SELECT ROW_NUMBER() OVER(ORDER BY idnkey) as RowNumber, idnkey FROM {0} )
SELECT *
FROM {0} INNER JOIN
pagingOutputSchema ON {0}.idnkey = pagingOutputSchema.idnkey
WHERE pagingOutputSchema.RowNumber BETWEEN ({1} - 1) * {2} + 1 AND {1} * {2}
ORDER BY 1".FormatWith(tmpFullTableName, page, rowsPerPage);
_schemaXMLHandler.FillTableInDataSet(releasedOutput.Prefix, pagedSql, dataSetSchema, partitionNode);
}
else
{
var node = nodes.GetNodeByName(dataTable.TableName);
_schemaXMLHandler.FillTableInDataSet(releasedOutput.Prefix, node.Sql, dataSetSchema, node);
}
}
//this saves the loaded schema into a file
var dstFileName = fileNamePre + "_part_" + (fileIndex) + ".xml";
using (var fileStream = File.Create(dstFileName))
dataSetSchema.WriteXml(fileStream);
fileIndex++;
}