如何获取 Tridion 中项目的 XML 结构(如模式、组件、复合模板、关键字、类别、文件夹等)?
它是在 Tridion 的安装文件夹中还是在其他任何地方?或者有什么方法可以直接从 Tridion UI 访问它?
如何获取 Tridion 中项目的 XML 结构(如模式、组件、复合模板、关键字、类别、文件夹等)?
它是在 Tridion 的安装文件夹中还是在其他任何地方?或者有什么方法可以直接从 Tridion UI 访问它?
这是您可以在浏览器控制台中运行以实现此目的的最简单的代码段:
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();
}
}
如果使用 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)公开的不同。
ñ
您也可以使用协议处理程序。如果您在内容管理服务器上登录,只需启动 Internet Explorer 并在地址栏中输入 uri。它将显示任何项目的 XML 表示。但是:这不适用于 64 位版本的 IE 9(请参阅另一个最近的线程)。
还有两种快速获取组件 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));
}
}
}
正如 Quirijn 所指出的,使用协议处理程序是一种最喜欢的技术。另外 - 如果您使用的是 Tridion 2011,那么来自http://code.google.com/p/tridion-2011-power-tools/的 Item Xml 扩展也非常有用。
如果您使用的是旧版本的 Tridion,您可能还想尝试将 UI 设置为调试模式并以这种方式检查 XML。