public XmlFileEntity LoadXmlFile(string fileName) { var xmlDoc = XDocument.Load(fileName); var rootNode = new XmlNodeEntity(xmlDoc.Root.Name.LocalName, xmlDoc.Root.Value); var xmlFileEntity = new XmlFileEntity(rootNode); var childrenNodesFromRoot = GetChildrenNodes(xmlDoc.Root); childrenNodesFromRoot.ForEach(x => xmlFileEntity.RootNode.AddChildNode(x)); return(xmlFileEntity); }
List <string> BuildXmlPath(XmlNodeEntity deepestNode, XmlNodeEntity rootNode) { var path = new List <string>(); var currentNode = deepestNode; while (!currentNode.Equals(rootNode)) { path.Add(currentNode.Name); currentNode = currentNode.Parent; } path.Add(rootNode.Name); path.Reverse(); return(path); }
bool FindPathThroughChildren(XmlNodeEntity parentNode, XmlNodeEntity rootNode, IEnumerable <string> xmlPathToFind) { foreach (var childNode in parentNode.ChildrenNodes) { var xmlPath = BuildXmlPath(childNode, rootNode); if (ListsAreEquals(xmlPath, xmlPathToFind)) { return(true); } var xmlPathFound = FindPathThroughChildren(childNode, rootNode, xmlPathToFind); if (xmlPathFound) { return(true); } } return(false); }
List <XmlNodeEntity> GetChildrenNodes(XElement parentElement) { var children = new List <XmlNodeEntity>(); foreach (var oneElt in parentElement.Elements()) { // adds children nodes of the current XElement to the new entity var childrenList = GetChildrenNodes(oneElt); var newNodeEntity = new XmlNodeEntity(oneElt.Name.LocalName, oneElt.Value); childrenList .ForEach(x => newNodeEntity.AddChildNode(x)); // adds attributes of the current XElement to the new entity var attributes = GetListOfAttributesFromXelement(oneElt); attributes .ToList() .ForEach(x => newNodeEntity.AddAttribute(x.Key, x.Value)); children.Add(newNodeEntity); } return(children); }
public XmlFileEntity(XmlNodeEntity rootNode) { this.rootNode = rootNode; }