C# Sitecore是否从媒体库加载XML文件?
我试图从媒体库加载一个xml文件,但路径有问题。当xml文件位于实际的服务器文件中时,或者当它位于另一个托管站点上时,我能够加载xml,但当文件位于媒体库中时,则无法加载。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
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的答案中的流似乎更好。