【问题标题】:XML validation error when updating Keyword metadata更新关键字元数据时出现 XML 验证错误
【发布时间】:2012-06-13 07:56:08
【问题描述】:

继我之前关于创建地址簿的问题(非常感谢彼得!)之后,我有一个小型的一次性控制台应用程序可以做到这一点并且运行良好 - 但此外我正在尝试更新关键字的元数据使用创建的通讯簿的项目 ID。

稍微缩短的 sn-p ...

StaticAddressBook ab = new StaticAddressBook();
ab.Title = title;
ab.Key = key;
ab.Save();

// id is a correct Keyword TCM ID
Keyword k = tdse.GetObject(id, EnumOpenMode.OpenModeEdit);
if (k != null)
{
    k.MetadataFields["addressbookid"].value[0] = ab.Id.ItemId;
    k.Save(true);
}

我在 Save() 上不断收到以下错误:

XML 验证错误。原因:命名空间中的元素“元数据” 'uuid:2065d525-a365-4b45-b68e-bf45f0fba188' 具有无效的子元素 命名空间中的“地址簿ID” 'uuid:2065d525-a365-4b45-b68e-bf45f0fba188'。可能的元素列表 预期:命名空间中的“contact_us_email” 'uuid:2065d525-a365-4b45-b68e-bf45f0fba188'

但我知道关键字分配了正确的元数据,(这就是我不费心检查的原因!)。从当前有问题的关键字缩短 Tridion XML:

<tcm:Keyword>
   <tcm:Data>
      <tcm:MetadataSchemaxlink:type="simple"xlink:title="IP.Location.Metadata" xlink:href="tcm:49-2142-8" />
      <tcm:Metadata>
         <Metadata xmlns="uuid:2065d525-a365-4b45-b68e-bf45f0fba188">
            <email>...</email>
            <addressbookid>3</addressbookid>
            <contact_us_email>...</contact_us_email>
            <request_a_sample_email>...</request_a_sample_email>
            <webinar_feedback_email>....</webinar_feedback_email>
         </Metadata>
      </tcm:Metadata>
      <tcm:IsRoot>true</tcm:IsRoot>
   </tcm:Data>
</tcm:Keyword>

我是否错过了一些不能以这种方式更新关键字元数据的事情?

我想我可以查看核心服务来更新关键字,但在此应用程序中执行所有操作似乎很有意义。

更新

奇怪的是,订单在这里很关键! 以下代码有效:

ItemFields fields = k.MetadataFields;

System.Diagnostics.Debug.WriteLine(fields.Count);

string email = fields[1].value[1];
string contact = fields[3].value[1];
string request = fields[4].value[1];
string webinar = fields[5].value[1];

fields[1].value[1] = email;
fields[2].value[1] = ab.Id.ItemId;
fields[3].value[1] = contact;
fields[4].value[1] = request;
fields[5].value[1] = webinar;

k.Save(true);

在获取/设置值时被基于非 0 的索引发现,不得不按顺序重新分配现有字段。

干杯

【问题讨论】:

  • 几乎回复“使用 ItemFields,它会为你处理”...然后注意到您正在使用 TDSE...尝试打开/保存和关闭关键字,然后再试一次?跨度>

标签: tridion


【解决方案1】:

自创建组件以来,Schema 中的字段顺序似乎发生了变化。至少 Schema 期望 contact_us_email 在您当前拥有 addressbookid 的位置。

可能还有其他更改,因此在您运行工具之前,我会验证架构中字段的顺序并确保组件匹配。

【讨论】:

  • 从他发布的 XML 中我读到该字段已经存在一个值 - 所以它只会覆盖该值。它不会自动修复订单。
猜你喜欢
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多