Azure 将Blob从BlobStorage加载到XslCompiledTransform.Load()中

Azure 将Blob从BlobStorage加载到XslCompiledTransform.Load()中,azure,azure-storage-blobs,Azure,Azure Storage Blobs,我在AzureBlobStorage中有一个XSLT文件 我需要将该Blob加载到XslCompiledTransform.Load()中 我试过使用MemoryStream和StreamReader等 请在这方面提供帮助。我尝试了MemoryStream,效果很好。请参阅下面的代码 var stream_xslt = new MemoryStream(); await blob_xslt.DownloadToStreamAsync(stream_xslt); stream_xslt.Posit

我在AzureBlobStorage中有一个XSLT文件

我需要将该Blob加载到XslCompiledTransform.Load()中

我试过使用MemoryStream和StreamReader等


请在这方面提供帮助。

我尝试了
MemoryStream
,效果很好。请参阅下面的代码

var stream_xslt = new MemoryStream();
await blob_xslt.DownloadToStreamAsync(stream_xslt);
stream_xslt.Position = 0;

var stream_xml = new MemoryStream();
await blob_xml.DownloadToStreamAsync(stream_xml);
stream_xml.Position = 0;

XslCompiledTransform xslt = new XslCompiledTransform();
StringBuilder stringBuilder = new StringBuilder();
xslt.Load(XmlReader.Create(stream_xslt));
xslt.Transform(XmlReader.Create(stream_xml), 
XmlWriter.Create(stringBuilder));

要使用uri访问blob,如果其访问级别不是公共的,则必须使用uri。由于您可以连接到存储帐户,因此,如果blob有效,则首选将其下载到流

这个答案适用于你的问题

        CloudBlobClient blobClient = GetCloudBlobContainer();
        CloudBlob blob_xslt = blobClient.GetContainerReference("container1").GetBlobReference("name.xslt");

        CloudBlob blob_xml = blobClient.GetContainerReference("container2").GetBlobReference(name.xml);

        StringBuilder stringBuilder = new StringBuilder();
        XslCompiledTransform xslt = new XslCompiledTransform();
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.OmitXmlDeclaration = true;
        settings.ConformanceLevel = ConformanceLevel.Fragment;
        settings.CloseOutput = false;
        string xml_string = null;
        string xslt_string = null;
        using (var xmlstream = await blob_xml.OpenReadAsync())
        {
            using (var xsltstream = await blob_xslt.OpenReadAsync())
            {

                StreamReader xmlreader = new StreamReader(xmlstream);
                StreamReader xsltreader = new StreamReader(xsltstream);
                while (!xmlreader.EndOfStream && !xsltreader.EndOfStream)
                {
                    xml_string = xmlreader.ReadToEnd();
                    xslt_string = xsltreader.ReadToEnd();
                }
                byte[] byteArray = Encoding.UTF8.GetBytes(xslt_string);
                var tmpFile = Path.GetTempFileName();
                var tmpFileStream = System.IO.File.OpenWrite(tmpFile);
                tmpFileStream.Write(byteArray, 0, byteArray.Length);
                tmpFileStream.Close();
                xslt.Load(tmpFile);

                byte[] byteArray1 = Encoding.UTF8.GetBytes(xml_string);
                var tmpFile1 = Path.GetTempFileName();
                var tmpFileStream1 = System.IO.File.OpenWrite(tmpFile1);
                tmpFileStream1.Write(byteArray1, 0, byteArray1.Length);
                tmpFileStream1.Close();

                xslt.Transform(tmpFile1, XmlWriter.Create(stringBuilder, settings));

            }

        } 

blob应该可以公开访问。当您获取blob URL并将其粘贴到浏览器的地址栏时会发生什么?您是否能够看到文件的内容,或者是否收到404错误?资源未找到错误即将出现。但是在那个容器里发现了一个水滴。是否有其他方法加载该文件@Gauravmantri您所说的
是什么意思,但在该容器中找到了blob
?您的意思是在存储资源管理器中浏览blob时可以看到它吗?当我公开blob时,当我尝试加载blob url时,xml文件将加载为html。如果不是的话。。引发Private(未找到资源)错误@高拉夫曼特里
        CloudBlobClient blobClient = GetCloudBlobContainer();
        CloudBlob blob_xslt = blobClient.GetContainerReference("container1").GetBlobReference("name.xslt");

        CloudBlob blob_xml = blobClient.GetContainerReference("container2").GetBlobReference(name.xml);

        StringBuilder stringBuilder = new StringBuilder();
        XslCompiledTransform xslt = new XslCompiledTransform();
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.OmitXmlDeclaration = true;
        settings.ConformanceLevel = ConformanceLevel.Fragment;
        settings.CloseOutput = false;
        string xml_string = null;
        string xslt_string = null;
        using (var xmlstream = await blob_xml.OpenReadAsync())
        {
            using (var xsltstream = await blob_xslt.OpenReadAsync())
            {

                StreamReader xmlreader = new StreamReader(xmlstream);
                StreamReader xsltreader = new StreamReader(xsltstream);
                while (!xmlreader.EndOfStream && !xsltreader.EndOfStream)
                {
                    xml_string = xmlreader.ReadToEnd();
                    xslt_string = xsltreader.ReadToEnd();
                }
                byte[] byteArray = Encoding.UTF8.GetBytes(xslt_string);
                var tmpFile = Path.GetTempFileName();
                var tmpFileStream = System.IO.File.OpenWrite(tmpFile);
                tmpFileStream.Write(byteArray, 0, byteArray.Length);
                tmpFileStream.Close();
                xslt.Load(tmpFile);

                byte[] byteArray1 = Encoding.UTF8.GetBytes(xml_string);
                var tmpFile1 = Path.GetTempFileName();
                var tmpFileStream1 = System.IO.File.OpenWrite(tmpFile1);
                tmpFileStream1.Write(byteArray1, 0, byteArray1.Length);
                tmpFileStream1.Close();

                xslt.Transform(tmpFile1, XmlWriter.Create(stringBuilder, settings));

            }

        }