【问题标题】:Tridion 2011 Core Service: Unable to update component with new field using Xml manipulationTridion 2011 核心服务:无法使用 Xml 操作更新具有新字段的组件
【发布时间】:2012-03-25 04:12:45
【问题描述】:

在使用核心服务为 Tridion 2011 项目编写自定义导入工具时,我在尝试保存组件时遇到了问题。

当组件上的字段有值但没有值时,以下代码可以正常工作。

这是我的代码(为简洁起见,删除了错误处理):

//component is a ComponentData object from Tridion
var doc = new XmlDocument();
doc.LoadXml(component.Content);

var namespaces = new XmlNamespaceManager(doc.NameTable);
namespaces.AddNamespace("ns", doc.DocumentElement.NamespaceURI);

//componentFromSpreadsheet has a dictionary of fields and values to update
foreach (var field in componentFromSpreadsheet.Fields)
{
    XmlNode xmlNode = doc.SelectSingleNode("//ns:" + field.Key, namespaces);

    if (xmlNode == null)
    {
        xmlNode = doc.CreateNode(XmlNodeType.Element, field.Key,
                                 doc.DocumentElement.NamespaceURI);
        doc.DocumentElement.AppendChild(xmlNode);
    }

    //Namespace any Html in the field       
    string fieldValue = HtmlTidy.Tidy(field.Value);
    xmlNode.InnerXml = fieldValue;
}


component.Content = doc.OuterXml;

//This line throws a FaultException<CoreServiceException> with an 
//XmlException from tridion
client.Save(component, null);

这是来自 Tridion 的消息:

命名空间中的元素“内容” 'uuid:09ed2feb-f7cb-4760-ba4c-b9ff4f45d025' 具有无效的子元素 命名空间“uuid:09ed2feb-f7cb-4760-ba4c-b9ff4f45d025”中的“摘要”。 预期的可能元素列表:命名空间中的“related_links” 'uuid:09ed2feb-f7cb-4760-ba4c-b9ff4f45d025'

我知道摘要是该组件架构的有效字段。

似乎架构是严格的,并且关心 Xml 中字段的顺序。有没有办法绕过这个或其他方法?

【问题讨论】:

    标签: c# tridion


    【解决方案1】:

    默认情况下,顺序确实很重要(使用 xsd:sequence)。

    您可以更新 Schema 以不关心顺序(例如使用 xsd:all 代替),但它可能会导致 Schema 成为 XSD Schema(因此您将失去使用 GUI 编辑它们的能力)。

    您需要做的是确保将它们插入正确的位置。

    因此,您需要以正确的顺序遍历 componentFromSpreadsheet - 这很可能意味着您需要为该顺序设置一个单独的变量,或者您需要使用与 Dictionary 不同的数据类型。

    【讨论】:

    【解决方案2】:

    很遗憾,您必须以正确的顺序添加所有必填字段。该模式确实将元素定义为有序序列。您可以尝试迭代架构的字段,然后从电子表格而不是您当前使用的方法中选择它们。

    【讨论】:

    • 在同事 (Ryan Durkin) 的建议下,我们使用了序列化方法,该方法效果很好,并且是强类型但不够灵活,因此我们需要同意我们将要更新的模式。
    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2013-01-07
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    相关资源
    最近更新 更多