I have xml file like following.
<Root> <Main Name="Install"> <Details>Success</Details> <Maintain>Install period</Maintain> </Main> <Main Name="Uninstall"> <Details>failure</Details> <Maintain>uninstall period</Maintain> </Main> <Main Name="Discard"> <Details>failure</Details> <Maintain>discard period</Maintain> </Main> <Main Name="Install"> <Details>Done</Details> <Maintain>Got Output</Maintain> </Main> </Root>
I need only last latest update to print in xml.
I've used following code and found output.
XDocument xDoc1 = XDocument.Load(inputFileName); var elems = xDoc1.Element("Root").Elements("Main"); XElement xInstall = elems.LastOrDefault(a => a.Attribute("Name").Value == "Install"); XElement xUninstall = elems.LastOrDefault(a => a.Attribute("Name").Value == "Uninstall"); XElement xDiscard = elems.LastOrDefault(a => a.Attribute("Name").Value == "Discard"); XDocument xdoc2 = new XDocument(); xdoc2.Add( new XElement("Root", new XElement[] { xInstall, xDiscard, xUninstall }) ); xdoc2.Save(ouputFileName);
But while using this same logic in foreach loop I can't get correct output. My code is,
XmlDocument xml = new XmlDocument(); string xmlLocation = @"C:\Input.xml"; xml.Load(xmlLocation); XmlNodeList MainNameList = xml.SelectNodes("/Root/Main"); XDocument xDoc1 = XDocument.Load(@"C:\Input.xml"); var elems = xDoc1.Element("Root").Elements("Main"); XDocument xdoc2 = new XDocument(); xdoc2.Add(new XElement("Root")); foreach (XmlNode MainNode in MainNameList) { string mainName = MainNode.Attributes[0].Value; XElement MainNode = elems.LastOrDefault(a => a.Attribute("Name").Value == mainName); xdoc2.Root.Add(new XElement("Root", new XElement(MainNode))); } xdoc2.Save(@"C:\Output.xml");
the output came like following:
<Root> <Main Name="Install"> <Details>Success</Details> <Maintain>Naveen</Maintain> </Main> <Main Name="Uninstall"> <Details>failure</Details> <Maintain>uninstall period</Maintain> </Main> <Main Name="Discard"> <Details>failure</Details> <Maintain>discard period</Maintain> </Main> <Main Name="Install"> <Details>Success</Details> <Maintain>Naveen</Maintain> </Main> </Root>
But I need output like following:
<Root> <Main Name="Uninstall"> <Details>failure</Details> <Maintain>uninstall period</Maintain> </Main> <Main Name="Discard"> <Details>failure</Details> <Maintain>discard period</Maintain> </Main> <Main Name="Install"> <Details>Done</Details> <Maintain>Got Output</Maintain> </Main> </Root>
What is the mistake i had on my code? Please help me on this for get correct output by using foreach loop. Because I had so many main elements in my xml. thanks in advance.
No comments:
Post a Comment