【发布时间】:2012-03-09 11:35:07
【问题描述】:
我有以下 XML 结构:
<School>
<SchoolInfo>
<SchoolName>The Big School</SchoolName>
<Opened>2008</Opened>
<SchoolID>SCH1122</SchoolID>
<Geograpics>
<Location>London</Location>
<PostCode>ZZ11 1ZZ</PostCode>
</Geographics>
</SchoolInfo>
<Pupil>
<Name>Tom</Name>
<LastName>Jones</LastName>
<Class>12B</Class>
<Age>16</Age>
</Pupil>
<Pupil>
<Name>Steve</Name>
<LastName>Jobs</LastName>
<Class>09A</Class>
<Age>17</Age>
</Pupil>
<Pupil>
<Name>Joe</Name>
<LastName>Blogs</LastName>
<Class>13A</Class>
<Age>15</Age>
</Pupil>
</School>
如果我的 XML 结构要包含 400 名学生,我想分批处理 50 名学生,并为每 50 名学生分别写入 PSV,所以前 50 名,然后是 50-100,然后是 100-150 和依此类推,然后将每个批次写入一个新文件。这可以使用 XSLT 完成还是必须是程序化的?
我现在有处理 PSV 等的代码,我只是被搁置如何批量处理,因为坦率地说我不知道!
-- PSV:管道分隔值
SCH1122|London|Tom|12B|16
SCH1122|London|Steve|09A|17
SCH1122|London|Joe|13A|15
用于转换XML的代码如下:
private string PerformTransformation(string FilePath)
{
string fullXsltFile;
if (chkDateIncrement.Checked == false)
fullXsltFile = Resources.XSLTTest; // Resources.XSLT;
else
fullXsltFile = Resources.XSLTTest;
XmlDocument xsltTransformDocument = new XmlDocument();
xsltTransformDocument.LoadXml(fullXsltFile);
FileInfo xmlFileInfo = new FileInfo(FilePath);
string outputFile = CreateXmlOutputFileName(xmlFileInfo);
// load the Xslt with any settings
XslCompiledTransform transformation = new XslCompiledTransform();
XsltSettings settings = new XsltSettings(true, false);
settings.EnableScript = true;
transformation.Load(xsltTransformDocument, settings, new XmlUrlResolver());
using (XmlReader reader = XmlReader.Create(FilePath))
{
using (FileStream stream = new FileStream(outputFile, FileMode.Create))
{
transformation.Transform(reader, null, stream);
stream.Close();
}
reader.Close();
}
return outputFile;
}
我也在使用带有 VS2010 的微软处理器,所以很遗憾不支持 v2.0,因此必须是 v1.0 XSLT
最好使用标准 xslt1.0 构建来执行此操作,因为添加其他组件并不是最简单的事情。
【问题讨论】:
-
请提供所需的确切结果。此外,不是每个人都能猜测 PSV 的含义——我目前的猜测是“管道分隔值”。请编辑问题并提供必要的信息。
-
当然,XSLT 是“程序化的”:)
-
我之后能够批量处理数据(例如 400 个学生,只有 50 个 .txt 文件,所以制作 8 个文件)而不是你给出的实际输出结构,正如我所说在示例 XML 下方的段落中。
-
问题中没有提及创建不同的文件。请编辑问题并添加此缺失的要求。此外,在纯 XSLT 1.0 中创建多个输出文件是不可能的。您将需要一个 XSLT 2.0 处理器,或者一个具有
exslt:document扩展元素的 EXSLT 实现的 XSLT 处理器,或者您需要编写自己的扩展函数。请在问题中说明您需要哪些可能的解决方案。 -
按要求编辑,更喜欢扩展功能
标签: c# xml xslt batch-processing