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

パスを渡そうとしたり、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 に答える
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 に答える
1

これは、Sitecore Media Libraryから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ファイルを読み取ることができます。
完全な実装については、以下のソースを参照してください。

出典: SitecoreMVCのメディアライブラリからXML/JSONを読み取る

于 2015-12-23T17:54:56.193 に答える