【问题标题】:How to keep processing instructions of xml file in SDL Tridion?如何在 SDL Tridion 中保留 xml 文件的处理指令?
【发布时间】:2012-09-22 12:34:31
【问题描述】:

我正在尝试在组件 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文件)

【问题讨论】:

    标签: xml tridion processing-instruction


    【解决方案1】:

    我将此作为一个想法发布 - 尽管我无法做到完全按照您的意愿行事。我已经编写了一个 EventHandler 来操作 XMLSpy(以及此时包括 CME 在内的所有客户端)收到的 XML

    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 时,该事件将允许您附加指令。

    希望其他人可以帮助您解决这个问题 - 如果有时间,我会再挖掘一点

    【讨论】:

      【解决方案2】:

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

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

      希望有帮助

      克里斯

      【讨论】:

      • 感谢 Chris 的所有研究和解答。我也理解挑战。我只是想知道 Tridion CME 在源视图中添加后是否可以保留我的处理指令。这样就省去了所有的麻烦。有没有办法向 Tridion 提交功能请求?
      • 您可以通过ideas.sdltridion.com 提交想法或通过 SDL Tridion 客户支持提出增强请求 - 但正如 @Nuno 所述,您看到的 XML 只是内容节点,而不是完整的 XML ,所以在那里保存处理指令总是无效的,所以我认为他们不太可能实现它。但值得一试。祝你好运。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多