Sitecore从媒体库加载XML文件?

Pau*_*tos 5 c# xml xmldocument sitecore sitecore6

我试图从媒体库加载一个xml文件,但我遇到了路径问题.我可以在xml文件位于实际服务器文件中时加载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));
Run Code Online (Sandbox Code Playgroud)

然后,当我加载xml时,我正在执行以下操作:

XmlDocument xDoc = new XmlDocument();
xDoc.Load(Server.MapPath(url));
Run Code Online (Sandbox Code Playgroud)

它返回的路径是正确的,因为我已经测试过它将它放在一个锚标签中,看它是否会链接到xml文件,它确实如此.我在这个网站上发现了类似的帖子,但似乎都没有在xml.Load的上下文中处理媒体库项目.

任何关于这是否可能的信息或我可以做些什么来使其工作将非常感激.

谢谢.

Der*_*ker 6

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

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

using (var client = new WebClient())
{
    string strXml = client.DownloadString(new Uri(url));
    xmlDoc.LoadXml(strXml);
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*lak 6

使用媒体流而不是尝试传递路径或使用WebClient:

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);
Run Code Online (Sandbox Code Playgroud)