如何在SDL Tridion中保留xml文件的处理指令?

时间:2012-10-01 16:12:37

标签: xml tridion processing-instruction

我正在尝试在组件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在Authentic View中使用XMLSpy打开xml文件)

2 个答案:

答案 0 :(得分:3)

我对此进行了一些研究,我不相信这可以在CMS中完成。但是,您可以通过创建HTTPModule或Proxy或某种形式来实现此目的,该形式可以转换对CME的/ webdav目录所做的请求和响应。

从概念上讲,当XMLSpy发出请求时,新模块会根据作为Component的项目及其所基于的Schema将所需指令预先挂起到XML。然后,当您保存(POST)数据时,它将需要再次将其删除。这将使XML结构保持SDL Tridion所需的格式。

希望有所帮助

克里斯

答案 1 :(得分:2)

我发布这个作为一个想法 - 虽然我不能得到它做你想要的。我编写了一个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中。我遇到的问题是添加处理指令不属于DocumentElement,所以永远不要把它放到新的XML中。

所以我知道这并不能解决你的挑战 - 但是也许其他人知道一个事件,它允许你以类似的方式通过WebDAV盒加载XML时附加指令。

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