Как создать компонент, предоставив исходный файл XML в качестве входных данных

Я хочу создать компонент, предоставляя исходные данные XML напрямую, используя базовый сервис 2011, в SDL Tridion 2011.

Я хочу написать код для создания компонента путем загрузки исходного XML. Использование основного сервиса 2011.

Скажите, что имя XML-файла helloworld.xml и местоположение D:\abcd\cdef\all\helloworld.xml,

Я написал такой код, но он не работает.

XmlDocument contentxml = new XmlDocument();
contentxml.LoadXml(@"D:\abcd\cdef\all\helloworld.xml");
Response.Write("<BR>" + contentxml.ToString());
component.Content = contentxml.ToString();
ComponentData comp = (ComponentData)client.Create(component, new ReadOptions());

Response.write ничего не отображается Поправь меня, если я что-то пропустил. Это не создание какого-либо компонента, и ошибка идет.

Когда я попробовал это:

XmlDocument contentxml = new XmlDocument();
try
{
    contentxml.LoadXml(@"D:\abcd\cdef\all\helloworld.xml");
}
catch (XmlException exp)
{
    Console.WriteLine(exp.Message);
}
StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
contentxml.WriteTo(xw);
Response.Write("<BR>" + sw.ToString());

component.Content = sw.ToString();
ComponentData comp = (ComponentData)client.Create(component, new ReadOptions());

На этот раз он показывает unable to find UUId: что-то вроде того.

Мой helloworld.xml выглядит так.

<Content xmlns="uuid:1111eb85-0X11-11f9-1e2X-1X82X78fX920">
    <first>Hello World.This is Fisrt field</first>
    <second>Hello World.This is second field</second>
</Content>

Было бы замечательно, если бы кто-нибудь поделился некоторым примером кода, чтобы сделать это.

3 ответа

Решение

Общая схема:

  1. Загрузите XML из файла в XDocument / XmlDocument.
  2. Создайте новый компонент, вызвав GetDefaultData на клиенте.
  3. Установите свойство Content компонента в XML.
  4. Сохраните Компонент, вызвав Сохранить на клиенте.

Если вы еще этого не сделали, ознакомьтесь с документацией по API базового сервиса, доступной в SDL Tridion World.

Если у вас возникли проблемы с реализацией этого, пожалуйста, опубликуйте код, который у вас есть, и то, что вы пробовали, чтобы заставить его работать.

Загрузка любого XML из файла и попытка создать компонент не будут работать, если XML не использует формат, ожидаемый CMS.

Структура XML компонента в SDL Tridion имеет несколько фиксированных частей (пример содержимого узлов, метаданные) и несколько гибких частей (способ определения полей). Во-первых, вам нужно иметь XML с той же структурой, которую ожидает CMS. Обычно узлами, которые должны быть в вашем xml, являются CONTENT и METADATA, загружайте их в XML-документ и используйте API-интерфейс базовой службы для создания компонента с использованием содержимого, содержащегося в этих узлах. Лучший способ узнать, какова структура компонента на основе схемы, - это создать образец компонента с помощью пользовательского интерфейса Tridion и посмотреть, как создается XML. После этого вам нужно создать ваши источники XML, используя эту структуру. Недавно я опубликовал пример того, как создать компонент с использованием основной службы, пожалуйста, посмотрите на это.

Ошибка состояния ошибки при создании компонента с базовой службой

Следуя этому коду, вы можете получить доступ к узлам Content и Metadata

componentData.Content = xmlUtil.GetNewXmlNode ("Содержимое", schemaData.NamespaceUri); componentData.Metadata = xmlUtil.GetNewXmlNode("Метаданные", schemaData.NamespaceUri);

И замените их своим контентом

При использовании XmlDocument.LoadXML() ожидается, что в качестве входных данных будет использоваться строка XML, как прокомментировал Питер, вместо этого следует использовать XMLDocument.Load(), подробнее см. Здесь http://msdn.microsoft.com/en-us/library/a8ta6tz4.aspx

Когда вы преодолеете это препятствие, вам понадобится информация, которую Мигель дал в своем ответе, чтобы продолжить.

Другие вопросы по тегам