2012-03-30 45 views
4

我想通过给XML源输入来创建一个组件直接使用核心服务2011年,支持SDL Tridion创建一个组件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()); 

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> 

如果有人分享一些示例代码来完成它,那将是非常棒的。

+0

请说明你到目前为止所尝试过的 - 最好是不适合你的代码。就目前而言,您似乎期待人们为您编写代码。 – 2012-03-30 10:18:26

+3

这是很难与Tridion相关的,说实话...不能够使用System.Xml类加载XML文档与CoreService或Tridion无关... – 2012-03-30 13:15:31

回答

6

的大致轮廓:

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

如果您还没有,请查看SDL Tridion World上提供的Core Service API文档。

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

+0

我编辑了指示我试过的部分的问题,请点击它。 – Patan 2012-03-30 12:27:18

+2

我相信你需要使用.Load而不是.LoadXML当你想从文件加载。否则,它期望您按原样传递XML。 – 2012-03-30 13:06:41

8

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

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

Faulted State error while creating component with Core Service

在此之后的代码,你可以访问节点内容和元数据

componentData.Content = xmlUtil.GetNewXmlNode( “内容”,schemaData.NamespaceUri); componentData.Metadata = xmlUtil.GetNewXmlNode(“Metadata”,schemaData.NamespaceUri);

并取代那些与您的内容

4

使用XmlDocument.LoadXML()期待一个XML字符串作为输入,由彼得评论说,你应该使用XMLDocument.load方法()来代替,在这里看到更多的细节http://msdn.microsoft.com/en-us/library/a8ta6tz4.aspx

当你通过这个障碍时,你将需要米格尔在他的回答中提供的信息以继续。

相关问题