我的要求是加载基于 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++;
}