5

我正在尝试从媒体库加载 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 上下文中的媒体库项目。

任何有关这是否可能或我可以做些什么来使它工作的信息将不胜感激。

谢谢你。

4

3 回答 3

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);
}
于 2012-08-22T19:16:28.267 回答
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);
于 2012-08-22T20:16:08.393 回答
1

这是我用来从 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 文件,而不是使用硬编码的 item 路径。
您可以通过以下来源获得完整的实施。

来源: 从 Sitecore MVC 中的媒体库中读取 XML/JSON

于 2015-12-23T17:54:56.193 回答