Как создать компонент, предоставив исходный файл 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 ответа
Общая схема:
- Загрузите XML из файла в XDocument / XmlDocument.
- Создайте новый компонент, вызвав GetDefaultData на клиенте.
- Установите свойство Content компонента в XML.
- Сохраните Компонент, вызвав Сохранить на клиенте.
Если вы еще этого не сделали, ознакомьтесь с документацией по 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
Когда вы преодолеете это препятствие, вам понадобится информация, которую Мигель дал в своем ответе, чтобы продолжить.