3

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

它是在 Tridion 的安装文件夹中还是在其他任何地方?或者有什么方法可以直接从 Tridion UI 访问它?

4

5 回答 5

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();
   }
}
于 2012-06-12T08:33:36.863 回答
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)公开的不同。

ñ

于 2012-07-29T18:11:21.093 回答
4

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

于 2012-06-12T09:14:33.473 回答
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));
        }
    }
}
于 2012-07-21T07:12:11.350 回答
0

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

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

于 2012-06-12T22:14:58.447 回答