使用核心服务
更新Tridion中的组件时出错Root元素必须位于命名空间
中
我的代码:
ComponentData component = client.Read(webDavPath, readOptions) as ComponentData;
component = client.TryCheckOut(webDavPath, readOptions) as ComponentData;
//XDocument dom = XDocument.Parse(component.Content);
//// do your modifications to dom
//component.Content = dom.ToString();
doc.Load(filePath);
sw = new StringWriter();
xw = new XmlTextWriter(sw);
doc.WriteTo(xw);
component.Content = sw.ToString();
//client.CheckOut(webDavPath, true, readOptions);
client.Update(component, readOptions);
client.Save(component, readOptions);
client.CheckIn(component.Id, readOptions);
//client.Update(component, new ReadOptions());
// component = client.Update(component, readOptions) as ComponentData;
答案 0 :(得分:7)
在向组件添加新字段时,需要指定架构命名空间。
您可以在代码中获取架构命名空间,然后在添加新字段时使用此命名空间。
您没有显示用于更新内容的代码,因此很难向您展示问题,但下面的示例可能有所帮助。 (当你从现有的组件开始时,它可能略有不同)
// get namespace from component schema
SchemaData sd = client.Read(_componentSchemaTcmId, null) as SchemaData;
XNamespace ns = sd.NamespaceUri;
//create/update content
XElement contentXml = new XElement(ns + "news");
contentXml.Add(new XElement(ns + "title", "Title"));
contentXml.Add(new XElement(ns + "sub_title", "Sub Title"));
component.Content = contentXml.ToString();
此外,我认为您不需要client.Update(component, readOptions);
和client.Save(component, readOptions);
如果这没有帮助,请发布完整的代码。
答案 1 :(得分:2)
您的架构有一些命名空间,例如这里是我的架构:
<xsd:schema elementFormDefault="qualified" targetNamespace="uuid:ce656a4c-71e8-407f-8734-26a60da2440a" xmlns="uuid:ce656a4c-71e8-407f-8734-26a60da2440a" xmlns:tcmi="http://www.tridion.com/ContentManager/5.0/Instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.tridion.com/ContentManager/5.0/Instance"></xsd:import>
<xsd:annotation>
<xsd:appinfo>
<tcm:Labels xmlns:tcm="http://www.tridion.com/ContentManager/5.0">
<tcm:Label ElementName="text" Metadata="false">text</tcm:Label>
</tcm:Labels>
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Content">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="text" minOccurs="1" maxOccurs="1" type="xsd:normalizedString">
<xsd:annotation>
<xsd:appinfo>
<tcm:ExtensionXml xmlns:tcm="http://www.tridion.com/ContentManager/5.0"></tcm:ExtensionXml>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
注意"uuid:ce656a4c-71e8-407f-8734-26a60da2440a"
这是架构的命名空间。组件的根元素应该在同一个命名空间中,这里是相应的组件源:
<Content xmlns="uuid:ce656a4c-71e8-407f-8734-26a60da2440a">
<text>Some text</text>
</Content>
如果组件的命名空间不正确 - 您将获得类似于您拥有的异常。 如果这不能解决您的问题,请您发布架构和组件来源吗?