如何通过提供XML源文件作为输入来创建组件

Pat*_*tan 4 .net c# xml tridion

我想通过在SDL Tridion 2011中使用核心服务2011直接提供XML源代码来创建组件.

我想编写代码来通过上传源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());
Run Code Online (Sandbox Code Playgroud)

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());
Run Code Online (Sandbox Code Playgroud)

这次它显示了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>
Run Code Online (Sandbox Code Playgroud)

如果有人分享一些示例代码就可以了.

Mig*_*uel 8

除非XML使用CMS期望的格式,否则从aa文件加载任何XML并尝试创建组件将不起作用.

SDL Tridion中组件的XML结构具有一些固定部分(示例节点内容,元数据)以及一些灵活部分(您定义字段的方式).首先,您需要具有与CMS期望的结构相同的XML.通常,应该在xml中的节点是CONTENT和METADATA,在XML文档中加载这些节点,并使用Core Service API使用这些节点中包含的内容创建组件.了解基于模式的组件结构的最佳方法是使用Tridion UI创建示例组件,并查看XML的构造方式.之后,您需要使用该结构创建XML源.我最近发布了一个如何使用Core Service创建组件的示例,请看一下.

使用Core Service创建组件时出现故障状态错误

遵循此代码,您可以访问节点内容和元数据

componentData.Content = xmlUtil.GetNewXmlNode("Content",schemaData.NamespaceUri); componentData.Metadata = xmlUtil.GetNewXmlNode("Metadata",schemaData.NamespaceUri);

并用您的内容替换那些


Pet*_*aer 6

概要:

  1. 将XML从文件加载到XDocument/XmlDocument中.
  2. 通过在客户端上调用GetDefaultData来创建新的Component.
  3. 将Component的Content属性设置为XML.
  4. 通过在客户端上调用Save来保存组件.

如果您还没有,请查看SDL Tridion World上提供的核心服务API文档.

如果您在执行此操作时遇到问题,请发布您拥有的代码以及您尝试过的代码,以使其正常运行.

  • 我相信当你想要从文件加载时,你需要使用.Load而不是.LoadXML.否则,它希望您按原样传入XML. (2认同)