如何在Tridion中获取项目的XML结构(如架构,组件,复合模板,关键字,类别,文件夹等)?
它位于Tridion的安装文件夹中还是其他任何位置?或者有没有办法直接从Tridion UI访问它?
答案 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时。
<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>
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。