【发布时间】:2022-01-06 03:48:03
【问题描述】:
我正在尝试使用 xsl:result-document 将输出拆分为多个文件。但不知道如何将拆分结果存储在 Azure、FTP 和 SFTP 服务器中。
输入 XML:
<ArrayOfBatch>
<Batch>
<BatchName>BatchName-1</BatchName>
</Batch>
<Batch>
<BatchName>BatchName-2</BatchName>
</Batch>
<Batch>
<BatchName>BatchName-3</BatchName>
</Batch>
</ArrayOfBatch>
XSLT 格式:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" version="3.0" exclude-result-prefixes="fn xs">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="/ArrayOfBatch/Batch">
<xsl:result-document href="Batch-{position()}.xml" >
<xsl:copy-of select="*"/>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
c#代码:
public static string SaxonProcessorXSLT(string xmlToExport, string xslStylesheet)
{
using (StringReader xmlStream = new StringReader(xmlToExport))
{
using (StringReader xslStream = new StringReader(xslStylesheet))
{
Processor xsltProcessor = new Processor();
DocumentBuilder documentBuilder = xsltProcessor.NewDocumentBuilder();
documentBuilder.BaseUri = new Uri("file://");
XdmNode xdmNode = documentBuilder.Build(xmlStream);
XsltCompiler xsltCompiler = xsltProcessor.NewXsltCompiler();
XsltExecutable xsltExecutable = xsltCompiler.Compile(xslStream);
XsltTransformer xsltTransformer = xsltExecutable.Load();
xsltTransformer.InitialContextNode = xdmNode;
xsltTransformer.BaseOutputUri = new Uri("D://home//data//");
using (StringWriter stringWriter = new StringWriter())
{
Serializer serializer = xsltProcessor.NewSerializer();
serializer.SetOutputWriter(stringWriter);
xsltTransformer.Run(serializer);
return stringWriter.ToString();
}
}
}
}
从上面的代码中,拆分文件的结果存储在本地路径“D://home//data8//”中,但我正在寻找一种解决方案,通过使用 URI 将此结果存储在 azure、FTP 和 SFTP 服务器中在 xsltTransformer.BaseOutputUri 上。
我已经对此进行了一些研发,但它并没有解决我的问题。寻求快速响应。提前致谢。
【问题讨论】:
-
你在 Azure 中运行 C# 代码吗?
-
我不希望库支持 SFTP URL。您必须自己处理上传问题。
stringWriter.ToString()是否返回您要上传的内容?