gpt4 book ai didi

tridion - 使用 SDL Tridion 2011 中的核心服务更新组件

转载 作者:行者123 更新时间:2023-12-01 03:32:37 24 4
gpt4 key购买 nike

我正在使用 Tridion 2011 中的核心服务更新组件。

示例代码如下,

string COMPONENT_URI = "tcm:8-674";
string SCHEMA_URI = "tcm:8-426-8";

ComponentData component = client.TryCheckOut(COMPONENT_URI, null) as ComponentData;

try
{
Response.Write("<BR>" + component.Content);
XDocument xdoc = XDocument.Parse(component.Content);
var element = xdoc.Elements("first").Single();
element.Value = "updated";
xdoc.Save(component.Content);
client.Save(component, null);
Response.Write("<BR"+"SAVED");
}
catch (Exception ex)
{
Response.Write("Unable to save comp" + ex.Message);
}

client.CheckIn(COMPONENT_URI, null);

我遇到以下异常:

 Unable to save compSequence contains no elements 

详细信息:

first - 组件中字段的名称

有人可以帮忙吗?

谢谢

最佳答案

Tridion 中组件的 XML 格式如下:

<Content xmlns="uuid:2607D20D-1B22-4994-98C1-66D9ACF85C20">
<first>The value of my first field</first>
<second>The value of my second field</second>
</Content>

您的相关代码片段是:

var element = xdoc.Elements("first").Single();

这是无法选择一个元素,因为它是:

  1. 不为选择提供命名空间
  2. 只选择文档根目录的直接子节点

您似乎期望如果您不指定命名空间,系统会自动选择默认命名空间,但事实并非如此。一旦有了处理 namespace 的 XML,每个查询都必须指定正确的 namespace 。

如果您修改代码来处理这两个问题,它应该看起来像这样:

XNamespace ns = xdoc.Root.GetDefaultNamespace();
var element = xdoc.Descendants(ns+"first").Single();

您可能需要考虑阅读 .NET 对 XML 命名空间的处理以及一般的 XML 命名空间,因为这是一个非常常见的错误,您只需要快速摆脱您的系统。

在您找到给定的帮助器类之前想要通过核心服务更新组件 XML 的人 here有用。

此外,Mihai 指出您调用 XDocument.Save 的方式是错误的。它需要一个文件名作为其参数,而您将您的组件的 XML 传递给它。

关于tridion - 使用 SDL Tridion 2011 中的核心服务更新组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10069726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com