我正在尝试在组件 xml 的源视图中向我的 xml 文件添加处理指令。例如:
<?altova_sps C:Userssrcsps2012spsfile.sps?>
<my_element xmlns="uuid:8d903098-e607-4d96-90a7-14d2d188dab7">
...
</my_element>
单击"保存"后,Tridion CME 自动删除了处理指令。有没有办法改变这种行为?
(我想添加处理指令,以便我可以使用 WebDAV 在真实视图中使用 XMLSpy 打开 xml 文件)
我已经对此进行了一些研究,但我不相信这可以从CMS内部完成。但是,您可以通过创建HTTPModule或代理或某种形式来转换对CME的/webdav目录的请求和响应来实现这一点。
从概念上讲,当 XMLSpy 发出请求时,新模块将根据作为组件的项及其基于的架构将所需的指令预先附加到 XML。然后,当您保存(POST)数据时,它需要再次将其剥离。这将使 XML 结构保持 SDL Tridion 所需的格式。
希望有帮助
克里斯
我将其作为一个想法发布 - 尽管我无法让它做你想做的事。我编写了一个 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 时附加指令。
希望其他人可以帮助您关闭它 - 如果我有时间,我会再挖一点