private static void MergeComplexStructure_Action(XmlNode childNode, XmlNode destinationNode) { if (childNode == null) { return; } MetadataDocumentManagement metaDataDocMgt = MetadataDocumentManagement.Instance; XmlNode actionIDNode = childNode.SelectSingleNode("./a:ID", metaDataDocMgt.XmlNamespaceMgt); if ((actionIDNode == null) || (String.IsNullOrEmpty(actionIDNode.InnerText))) { XmlNode captionMlNode = childNode.SelectSingleNode("./a:CaptionML", metaDataDocMgt.XmlNamespaceMgt); if (captionMlNode == null) { captionMlNode = childNode.FirstChild; string log = string.Format(CultureInfo.InvariantCulture, Resources.AddCaptionMl, childNode.InnerXml); TransformationLog.GenericLogEntry(log, LogCategory.Warning, metaDataDocMgt.GetCurrentPageId); } String newID = metaDataDocMgt.CalcId(GetProperty(captionMlNode.ParentNode, "NewID"), XmlUtility.GetCaption(captionMlNode.InnerText), captionMlNode.ParentNode.ParentNode.Name).ToString(CultureInfo.InvariantCulture); actionIDNode = metaDataDocMgt.XmlDocument.CreateNode(XmlNodeType.Element, "ID", metaDataDocMgt.XmlNamespace); actionIDNode.InnerText = newID; XmlNode newNode = metaDataDocMgt.XmlDocument.ImportNode(childNode, true); newNode.PrependChild(actionIDNode); destinationNode.AppendChild(newNode); } else { XmlNode destinationActionNode = destinationNode.SelectSingleNode("./a:" + childNode.Name + "[./a:ID = " + actionIDNode.InnerText + "]", metaDataDocMgt.XmlNamespaceMgt); if (destinationActionNode != null) { MergeSimpleSection(childNode, destinationActionNode); } else { /* TODO !!! TEMPORARY !!! we should change TransformPages.xml instead! */ // Lets try to find it by ID: XmlNodeList actionListById = childNode.SelectNodes(@".//a:ID", metaDataDocMgt.XmlNamespaceMgt); if (actionListById.Count == 0) { /* Something is wrong in the transformation input file... */ string logStr = string.Format( CultureInfo.InvariantCulture, Resources.IDNotFound, actionIDNode.InnerText); TransformationLog.GenericLogEntry(logStr, LogCategory.CheckInputFile, metaDataDocMgt.GetCurrentPageId); // break; return; } foreach (XmlNode actionById in actionListById) { string query = ".//a:Action[./a:ID = " + actionById.InnerText + "]"; XmlNode destinationActionNodeById = destinationNode.ParentNode.SelectSingleNode(query, metaDataDocMgt.XmlNamespaceMgt); if (destinationActionNodeById != null) { MergeSimpleSection(actionById.ParentNode, destinationActionNodeById); } else { /* Something is wrong in the transformation input file... */ string logStr = string.Format( CultureInfo.InvariantCulture, Resources.IDNotFound, actionById.InnerText); string tmpAddStr = string.Empty; XmlNode tmp = metaDataDocMgt.XmlCurrentFormNode.SelectSingleNode(".//a:ID[../a:ID = " + actionById.InnerText + "]", metaDataDocMgt.XmlNamespaceMgt); if (tmp != null) { tmpAddStr = tmp.ParentNode.ParentNode.InnerXml; } TransformationLog.GenericLogEntry(logStr, LogCategory.CheckInputFile, metaDataDocMgt.GetCurrentPageId, tmpAddStr); } } } } }