To create/migrate Tridion item using XmL is good option but its tricky when you have component link and media links etc.
- Define your Schema with simple fields to test.
- Title
- Description
Create a class in C# like following.
public class Book
{
[XmlElement(ElementName = "Title")]
public string Title { get; set; }
[XmlElement(ElementName = "Description")]
public string Synopsis{ get; set; }
}
Fill this component with your required data and serialize it to disk as XML file.
Similarly you can Create XML for metadata of you component.
Importing XML (Code similar to @bart's)
var componentData = (ComponentData)tridionClient.CoreServiceClient.GetDefaultData(ItemType.Component, folderId, readOptions);
componentData.Title = componentDetails.Title;
var schemaId = tridionClient.CoreServiceClient.Read(componentDetails.SchemaWebDavUrl, readOptions).Id;
componentData.Schema.IdRef = schemaId;
var schemaFields = tridionClient.CoreServiceClient.ReadSchemaFields(schemaId, true, readOptions);
componentData.Content = UpdateNamespace(componentDetails.ComponentData, schemaFields.NamespaceUri).OuterXml; ;
// this is custom method which add required namespace in the XML. assuming you are generating XML from another source and this namespace is missing
if (componentDetails.MetaData != null)
{
componentData.Metadata = UpdateNamespace(componentDetails.MetaData, schemaFields.NamespaceUri).OuterXml);
}
tridionClient.CoreServiceClient.Create(componentData, readOptions);
for any component link. you have to first create linked component and cache its tcm-id and put that tcm-in the parent component. this is very interesting part.
Don't forget to put check of component/folder already exists
- Category keywords are just set of repeating nodes.