public static void Main()
var xmlDoc2 = XDocument.Parse(XmlText);
xmlDoc2.Descendants("build")
.SelectMany(b => b.Descendants("Process")
buildMach = b.Element("BuildMachine").Value,
p1 = p.Element("ProcessName").Value,
startTimeHeader = p.Element("startTimeHeader").Value,
conditions = p.Descendants("Condition")
cName = c.Attribute("name").Value,
cValue = c.Attribute("value").Value
successCriteria = p.Descendants("SuccessCriteria")
f1 = sc.Element("field").Value,
c1 = sc.Element("comparison").Value,
v1 = sc.Element("value").Value
Console.WriteLine("Results 1 (LINQ method syntax):");
foreach (var result in results1)
Console.WriteLine(JsonConvert.SerializeObject(result));
from b in xmlDoc2.Descendants("build")
from p in b.Descendants("Process")
buildMach = b.Element("BuildMachine").Value,
p1 = p.Element("ProcessName").Value,
startTimeHeader = p.Element("startTimeHeader").Value,
from c in p.Descendants("Condition")
cName = c.Attribute("name").Value,
cValue = c.Attribute("value").Value
from sc in p.Descendants("SuccessCriteria")
f1 = sc.Element("field").Value,
c1 = sc.Element("comparison").Value,
v1 = sc.Element("value").Value
Console.WriteLine("Results 2 (LINQ query syntax):");
foreach (var result in results2)
Console.WriteLine(JsonConvert.SerializeObject(result));
Console.WriteLine("Done");
public static string XmlText = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<codeFreezeTime>19:00</codeFreezeTime>
<BuildMachine>mach31</BuildMachine>
<ProcessName>SpinFileVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='VersionFile' value=""\\view\Build_NightlyDeveloper\R\filename1.cs"">
<comparison>equal</comparison>
<ProcessName>SpinFileVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='VersionFile' value=""\\view\Build_NightlyDeveloper\R\filename2.cs"">
<comparison>equal</comparison>
<ProcessName>SpinFileVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='VersionFile' value=""\\view\Build_NightlyDeveloper\R\filename3.h"">
<comparison>equal</comparison>
<BuildMachine>mach46</BuildMachine>
<ProcessName>SpinFileVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='VersionFile' value=""\\view\Build_NightlyDeveloper\K\filename4.cs"">
<comparison>equal</comparison>
<ProcessName>SpinFileVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='VersionFile' value=""\\view\Build_NightlyDeveloper\K\fiename5.h"">
<comparison>equal</comparison>
<ProcessName>SpinFileVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='VersionFile' value=""\\view\Build_NightlyDeveloper\K\filename6.cs"">
<comparison>equal</comparison>
<ProcessName>SpinFileVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='VersionFile' value=""\\view\Build_NightlyDeveloper\D\filename7.cs"">
<comparison>equal</comparison>
<ProcessName>SpinFileVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='VersionFile' value=""\\view\Build_NightlyDeveloper\K\K\filename8.cs"">
<comparison>equal</comparison>
<ProcessName>SpinFileVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='VersionFile' value=""\\view\Build_NightlyDeveloper\K\K\filename9.h"">
<comparison>equal</comparison>
<ProcessName>SpinFileVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='VersionFile' value=""\\view\Build_NightlyDeveloper\K\K\filename11.cs"">
<comparison>equal</comparison> <!--can't use >= here -->
<ProcessName>SpinFileVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='VersionFile' value=""\\view\Build_NightlyDeveloper\K\filename22.cs"">
<comparison>equal</comparison>
<ProcessName>SpinFileVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='VersionFile' value=""\\view\Build_NightlyDeveloper\K\filename33.cs"">
<comparison>equal</comparison>
<ProcessName>SpinISProjectVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='ProductName' value=""P1"">
<comparison>equal</comparison>
<ProcessName>SpinISProjectVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='ProductName' value=""P2"">
<comparison>equal</comparison>
<ProcessName>SpinISProjectVersionStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='ProductName' value=""P3"">
<comparison>equal</comparison>
<ProcessName>GetSWStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='DestinationPath' value=""D:\Builds\Retail\nightly"">
name='DestinationPath' value=""D:\Builds\Retail\nightly"">
<comparison>equal</comparison>
<value>Successful</value>
<ProcessName>ParseISLogStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='Nightly' value=""D:\nightly V17"">
name='Projects' value=""33"">
<comparison>equal</comparison>
<ProcessName>ParseISLogStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='Nightly' value=""D:\nightly V17 partb"">
name='Projects' value=""8"">
<comparison>equal</comparison>
<ProcessName>ParseISLogStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='BuildProject' value=""DInstallerBuild"">
name='BaseBuildArea' value=""D:\R_Builds\K\v2.1\nightly"">
<comparison>equal</comparison>
<ProcessName>ParseISLogStats</ProcessName>
<startTimeHeader>StartTime</startTimeHeader>
name='BuildProject' value=""KInstallerBuild"">
name='BaseBuildArea' value=""D:\R_Builds\K\v2.1\nightly"">
<comparison>equal</comparison>