【发布时间】: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 中字段的顺序。有没有办法绕过这个或其他方法?
【问题讨论】: