【问题标题】:How to create a component by providing the XML source file as input如何通过提供 XML 源文件作为输入来创建组件
【发布时间】:2012-04-14 00:29:45
【问题描述】:

我想通过在 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());

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>

如果有人分享一些示例代码来做这件事,那就太好了。

【问题讨论】:

  • 请说明您迄今为止尝试过的内容 - 最好使用不适合您的代码。就目前而言,您似乎希望人们为您编写代码。
  • 老实说,这几乎与 Tridion 无关...无法使用 System.Xml 类加载 XML 文档与 CoreService 或 Tridion 无关...

标签: c# .net xml tridion


【解决方案1】:

除非 XML 使用 CMS 所期望的格式,否则从文件加载任何 XML 并尝试创建组件将无法工作。

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

Faulted State error while creating component with Core Service

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

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

用你的内容替换那些

【讨论】:

    【解决方案2】:

    总纲:

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

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

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

    【讨论】:

    • 我已经编辑了我尝试过的问题指示部分,请看一下。
    • 我相信当您希望从文件加载时,您需要使用 .Load 而不是 .LoadXML。否则,它希望您按原样传递 XML。
    【解决方案3】:

    使用 XmlDocument.LoadXML() 需要一个 XML 字符串作为输入,正如 Peter 所说,您应该使用 XMLDocument.Load() 代替,请参阅此处了解更多详细信息 http://msdn.microsoft.com/en-us/library/a8ta6tz4.aspx

    当您通过该障碍后,您将需要 Miguel 在他的回答中提供的信息才能继续。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 2019-04-17
      • 2020-12-16
      • 1970-01-01
      • 2021-05-09
      • 2021-07-21
      • 1970-01-01
      相关资源
      最近更新 更多