如何在SDL Tridion中获取任何对象的XML结构

时间:2012-06-12 05:32:42

标签: tridion tridion-2011

如何在Tridion中获取项目的XML结构(如架构,组件,复合模板,关键字,类别,文件夹等)?

它位于Tridion的安装文件夹中还是其他任何位置?或者有没有办法直接从Tridion UI访问它?

5 个答案:

答案 0 :(得分:9)

以下是您可以在浏览器控制台中运行的最简单的代码段:

var itemUri = "tcm:...";
var item = $models.getItem(itemUri);
if(item)
{
   if(item.isStaticLoaded())
   {
      console.log(item.getStaticXml());
   }
   else
   {
      $evt.addEventHandler(item, "staticload", function() {
         console.log(item.getStaticXml());
      });
     item.staticLoad();
   }
}

答案 1 :(得分:4)

您也可以使用协议处理程序。如果您已登录内容管理服务器,只需启动Internet Explorer并在地址栏中键入uri。它将显示任何项目的XML表示。 Howvever:这不适用于64位版本的IE 9(参见另一个最近的主题)。

答案 2 :(得分:4)

如果使用CoreService,您还可以使用以下代码获取项目的XML:

public XmlElement ToR6Xml()
{
    DataContractSerializer dcs = new DataContractSerializer(ComponentData);
    using(MemoryStream stream = new MemoryStream())
    {
        dcs.WriteObject(stream, CurrentData);
        stream.Position = 0;
        XmlDocument document = new XmlDocument();
        document.Load(stream);
        return document.DocumentElement;
    }
}

然而,这将返回Tridion“R6”Xml,与通过TOM.NET或协议处理程序(“R5”xml)公开的不同。

<磷>氮

答案 3 :(得分:1)

另外两种快速获取组件XML的方法,这次是通过模板。

警告:请小心依赖项目的原始来源,尤其是当我们支持API时。

XSLT组件模板

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:generic="http://createandbreak.net/schema/generic" 
    xmlns:tcm="http://www.tridion.com/ContentManager/5.0"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    exclude-result-prefixes="xsl tcm xlink generic">

    <xsl:output omit-xml-declaration="no" indent="yes"
        method="xml" cdata-section-elements="description" />
    <xsl:variable name="Content" select="/tcm:Component/tcm:Data/tcm:Content" />

    <xsl:template match="/">
        <xsl:copy-of select="." />
        <xsl:apply-templates select="$Content/*" />
     </xsl:template>

    <xsl:template match="*">
        <xsl:copy-of select="." />
    </xsl:template>
</xsl:stylesheet>

C#装配模板构建块(TOM.NET)

using Tridion.ContentManager.ContentManagement;
using Tridion.ContentManager.Templating; 
using Tridion.ContentManager.Templating.Assembly;

namespace CreateAndBreakTemplates
{
    [TcmTemplateTitle("Show XML Guts")]
    public class ShowXmlGuts : ITemplate
    {
        public void Transform(Engine engine, Package package)
        {
            Item contentItem = package.GetByType(ContentType.Component);
            Component component = engine.GetObject(contentItem.GetAsSource().GetValue("ID")) as Component;
            package.PushItem("componentSource", package.CreateHtmlItem(component.Content.OuterXml));
        }
    }
}

答案 4 :(得分:0)

如Quirijn所述,使用协议处理程序是一种最受欢迎​​的技术。另外 - 如果您使用的是Tridion 2011,那么http://code.google.com/p/tridion-2011-power-tools/中的Item Xml扩展名也非常有用。

如果您使用的是较旧版本的Tridion,您可能还想尝试将UI设置为调试模式并以这种方式检查XML。