我正在尝试在组件XML的源视图中为我的XML文件添加处理指令。例如:

<?altova_sps C:\Users\src\sps\2012\spsfile.sps?>
<my_element xmlns="uuid:8d903098-e607-4d96-90a7-14d2d188dab7">
  ...
</my_element>
.

单击“保存”后,Tridion CME会自动删除处理指令。有没有办法改变这种行为?

(我想添加处理指令,以便我可以使用webdav与xmlspy打开xml文件,使用webdav)

有帮助吗?

解决方案

我已经研究过这一点,我不相信这可以从CMS内完成。但是,您可以通过创建一个HttpModule或代理或某种形式来实现这一目标,该表单将对CME的/ WebDAV目录所做的请求和响应转换为。

概念上,当XMLSPY进行请求时,新模块将基于作为组件的项目和其基于该项目的项目将所需指令预先将所需指令预先贴到XML。然后,当您保存(发布)数据后面,需要再次剥离它。这将使XML结构以SDL Tridion所需的格式留下。

希望有助于

chris

其他提示

我把它发布为一个想法 - 虽然我无法让它做得那样做得很好。我已经写了一个EventHandler来操纵XMLSPY收到的XML(以及此时包括CME的所有客户端)

using System;
using System.Text;
using System.Xml;
using Tridion.ContentManager.Extensibility.Events;
using Tridion.ContentManager.Extensibility;
using Tridion.ContentManager.ContentManagement;
using System.IO;

namespace UrbanCherry.Net.SDLTridion.EventHandlers
{
    [TcmExtension("AppendAuthenticHeaders")]
    public class AppendAuthenticHeaders : TcmExtension
    {
        public AppendAuthenticHeaders()
        {
            Subscribe();
        }

        public void Subscribe()
        {
            EventSystem.Subscribe<Component, LoadEventArgs>(AppendAuthenticHeader, EventPhases.Processed);
        }

        private void AppendAuthenticHeader(Component source, LoadEventArgs args, EventPhases phase)
        {
            if (source.ComponentType != ComponentType.Multimedia)
            {
                XmlDocument newXml = new XmlDocument();
                newXml.LoadXml("<?altova_sps C:\\Users\\src\\sps\\2012\\spsfile.sps?>" + source.Content.OuterXml);
                source.Content = newXml.DocumentElement;
            }
        }


    }
}
.

我试图操纵输出(通过替换字符串),它确实通过webdav显示在xmlspy中。我所拥有的问题是添加处理指令落在文章中,因此永远不会进入新XML。

所以我知道这不解决你的挑战 - 但也许别人知道一个事件,这将允许您在XML以类似的方式通过WebDAV墨盒加载时的指令。

希望别人可以帮助你关闭这一点 - 如果我有时间,我会挖一点

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top