コア サービスを使用して 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」の要素「Content」には、名前空間「uuid:09ed2feb-f7cb-4760-ba4c-b9ff4f45d025」に無効な子要素「summary」があります。予想される可能な要素のリスト: 名前空間 'uuid:09ed2feb-f7cb-4760-ba4c-b9ff4f45d025' の 'related_links'
summary がこのコンポーネントのスキーマの有効なフィールドであることはわかっています。
スキーマは厳密で、Xml 内のフィールドの順序を気にしているようです。これまたは別のアプローチを回避する方法はありますか?