Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sitecore是否从媒体库加载XML文件?_C#_Xml_Sitecore_Sitecore6_Xmldocument - Fatal编程技术网

C# Sitecore是否从媒体库加载XML文件?

C# Sitecore是否从媒体库加载XML文件?,c#,xml,sitecore,sitecore6,xmldocument,C#,Xml,Sitecore,Sitecore6,Xmldocument,我试图从媒体库加载一个xml文件,但路径有问题。当xml文件位于实际的服务器文件中时,或者当它位于另一个托管站点上时,我能够加载xml,但当文件位于媒体库中时,则无法加载。xml文件必须是托管在某处的物理文件吗 以下是检索媒体项路径的代码: Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master"); Sitecore.Data.Items.Item sampleItem = maste

我试图从媒体库加载一个xml文件,但路径有问题。当xml文件位于实际的服务器文件中时,或者当它位于另一个托管站点上时,我能够加载xml,但当文件位于媒体库中时,则无法加载。xml文件必须是托管在某处的物理文件吗

以下是检索媒体项路径的代码:

Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.Item sampleItem = master.GetItem("/sitecore/media library/Files/eBooks/testxml");
Sitecore.Data.Items.Item sampleMedia = new Sitecore.Data.Items.MediaItem(sampleItem);
string url = Sitecore.StringUtil.EnsurePrefix('/', Sitecore.Resources.Media.MediaManager.GetMediaUrl(sampleMedia));
然后,当我加载xml时,我将执行以下操作:

XmlDocument xDoc = new XmlDocument();
xDoc.Load(Server.MapPath(url));
它返回的路径是正确的,因为我已经测试过将它放在一个锚标记中,以查看它是否会链接到xml文件,确实如此。我在这个网站上找到了类似的帖子,但似乎没有一篇是在xml.Load上下文中处理媒体库项目的

如果这是可能的任何信息或我可以做什么使其工作将不胜感激


谢谢。

服务器。MapPath
将尝试将相对或虚拟路径映射到服务器上的物理文件/文件夹

尝试删除MapPath,然后转到
xDoc.Load(url)。或者,您可以使用WebClient下载XML文档,并将字符串传递给您的XmlDocument:

using (var client = new WebClient())
{
    string strXml = client.DownloadString(new Uri(url));
    xmlDoc.LoadXml(strXml);
}

使用媒体流,而不是尝试通过路径或使用网络客户端:

Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.Item sampleItem = master.GetItem("/sitecore/media library/Files/testxml");
Sitecore.Data.Items.Item sampleMedia = new Sitecore.Data.Items.MediaItem(sampleItem);

XmlDocument xmdDoc = new XmlDocument();
xmdDoc.Load(MediaManager.GetMedia(sampleMedia).GetStream().Stream);

下面是我用来从Sitecore媒体库读取XML(或JSON)文件的示例代码

    Sitecore.Data.Items.Item xmlMedia = new Sitecore.Data.Items.MediaItem(Sitecore.Context.Database.GetItem("/~/media/mySiteName/files/sampleXmlItem"));

    //OR

    Sitecore.Data.Items.Item xmlMedia = new Sitecore.Data.Items.MediaItem(Sitecore.Context.Database.GetItem(RenderingContext.Current.Rendering.DataSource));


    var fileType = xmlMedia.Fields["Extension"].Value;
    if (fileType == "xml" || fileType == "XML")
    {
      XmlDocument xmdDoc = new XmlDocument();
      xmdDoc.Load(Sitecore.Resources.Media.MediaManager.GetMedia(xmlMedia).GetStream().Stream);
      XmlDocument innerXmdDoc = new XmlDocument();
      innerXmdDoc.LoadXml(xmdDoc.LastChild.OuterXml);
      myData = JsonConvert.SerializeXmlNode(innerXmdDoc);
    }
您可以使用xml文件作为数据源,通过读取当前呈现项来读取xml文件,而不是使用硬编码项路径。
您可以浏览下面的源代码以获得完整的实现

来源:

为此使用HTTP(Web客户端)似乎不适合我。文件可能不在磁盘上,但可以从数据库中读取和传输。因此,使用Maras Musielak的答案中的流似乎更好。