private XmlDocument mapNode(XmlDocument destinationDoc, XmlNode destinationParentNode, XmlNode sourceNode)
{
try
{
// load the xpath from source node
// x[1]\y[2]\f[1]
string sourceXPath = XmlUtility.GetDirectXPathToNode(sourceNode);
// x\y\f
string sourceXMppingFilePath = XmlUtility.GetXPathToNode(sourceNode);
//load route from mappingFile of the source node
XmlMappingRoute route = xmlMapper.GetRoute(sourceXMppingFilePath);
XmlNode destinationPNode = destinationParentNode;
// check if this source xpath is mapped in the xmlMapper
if (xmlMapper.SourceExist(sourceXMppingFilePath))
{
if (!string.IsNullOrEmpty(sourceNode.InnerText) || addAlsoEmptyNode)
{
// get name of the destination node
string destinationTagName = route.GetDestinationTagNames();
// get xpath of the destination node
// X\XType\Y\F
string destinationXMppingFilePath = route.GetDestinationXPath();
//ToDo checkif the way to map is intern to extern or extern to intern
// X[1]\XType[2]\Y[1]\yType[4]\F[1]\yType[2]
string destinationXPath = "";
if (this.TransactionDirection == TransactionDirection.ExternToIntern)
destinationXPath = mapExternPathToInternPathWithIndex(sourceXPath, destinationXMppingFilePath);
else
destinationXPath = mapInternPathToExternPathWithIndex(sourceXPath, destinationXMppingFilePath);
// create xmlnode in document
XmlNode destinationNode = XmlUtility.GenerateNodeFromXPath(destinationDoc, destinationDoc as XmlNode,
destinationXPath); //XmlUtility.CreateNode(destinationTagName, destinationDoc);
destinationNode.InnerText = sourceNode.InnerText;
//if (type == element), get content
if (xmlMapper.IsSourceElement(sourceXPath))
{
}
//destinationParentNode = createMissingNodes(destinationParentXPath, currentParentXPath, destinationParentNode, destinationDoc);
////check if nodes in destination not exist, create them
//string destinationParentXPath = route.GetDestinationParentXPath();
//string currentParentXPath = XmlUtility.GetDirectXPathToNode(destinationParentNode);
}
}
if (sourceNode.HasChildNodes)
{
foreach (XmlNode childNode in sourceNode.ChildNodes)
{
destinationDoc = mapNode(destinationDoc, destinationPNode, childNode);
}
}
}
catch (Exception exception)
{
Debug.WriteLine(exception.Message);
}
return destinationDoc;
}