I'm trying to retrieve attribute values from my xml using c# and linq. The attribute data is blank when I print it. Any help would be greatly appreciated. Other than retrieving the attribute values, it gets the rest of the xml perfectly. After I get the xml once it's fixed, I will be checking it against log values for the daily build to determine success.
I looked at these links:
attribute retrieve value xml value any depth
This is my results followed by code retrieving all of the xml. Note that there are varying conditions and processes inside 2-10 build tags, and 1-3 SuccessCriteria tags:
results (note name and loc are not retrieving correctly so print blank:
build_machine='mach-46', process_name='SpinFileVersionStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-46', process_name='SpinFileVersionStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-46', process_name='SpinFileVersionStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-46', process_name='SpinFileVersionStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-46', process_name='SpinFileVersionStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-46', process_name='SpinFileVersionStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-46', process_name='SpinFileVersionStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-46', process_name='SpinFileVersionStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-46', process_name='SpinFileVersionStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-46', process_name='SpinISProjectVersionStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-46', process_name='SpinISProjectVersionStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-46', process_name='SpinISProjectVersionStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-64', process_name='BuildLogStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-64', process_name='CopyAlgorithmRepositoryBuildStats', name='', loc='',field='Status', comparison='equal', value='Success'
build_machine='mach-64', process_name='GetSWStats', name='', loc='',field='UpdateRequired', comparison='equal', value='YES'
build_machine='mach-64', process_name='GetSWStats', name='', loc='',field='Status', comparison='equal', value='Successful'
code:
XmlDocument xml = new XmlDocument();
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string newPath = Path.GetFullPath(Path.Combine(path, @"..\.."));
string finalPathXml = Path.GetFullPath(Path.Combine(newPath, @"new3.xml"));
var results = xmlDoc1.Descendants("build")
.SelectMany(x => x.Descendants("Process")
.SelectMany(y => y.Descendants("SuccessCriteria")
.Select(z => new
{
Build_Machine = (string)x.Element("BuildMachine"),
Process_Name1 = (string)y.Element("ProcessName"),
Name = (string)y.Attribute("name"),
Val = (string)y.Attribute("value"),
Field1 = (string)z.Element("field"),
Comparison1 = (string)z.Element("comparison"),
Value1 = (string)z.Element("value")
}))).ToList();
foreach (var cur in results)
{
string buildMach = (string)cur.Build_Machine;
string p1 = (string)cur.Process_Name1;
//string p2 = (string)cur.Process_Name2;
string name = (string)cur.Name;
string value = (string)cur.Val;
string f1 = (string)cur.Field1;
//string f2 = (string)cur.Field2;
string c1 = (string)cur.Comparison1;
//string c2 = (string)cur.Comparison2;
string v1 = (string)cur.Value1;
//string v2 = (string)cur.Value2;
Console.WriteLine("build_machine='{0}', process_name='{1}', name='{2}', loc='{3}',field='{4}', comparison='{5}', value='{6}'", buildMach, p1, name,value,f1,c1,v1);
}
xml:
<?xml version="1.0" encoding="UTF-8"?>
<BuildVerification>
<build>
<BuildMachine>mach-46</BuildMachine>
<Process>
<ProcessName>SpinFileVersionStats</ProcessName>
<Conditions>
<Condition
name='VersionFile' value="\\view\Build_NightlyDeveloper\filename.cs">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>SpinFileVersionStats</ProcessName>
<Conditions>
<Condition
name='VersionFile' value="\\view\Build_NightlyDeveloper\filename.h">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>SpinFileVersionStats</ProcessName>
<Conditions>
<Condition
name='VersionFile' value="\\view\Build_NightlyDeveloper\filename.cs">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>SpinFileVersionStats</ProcessName>
<Conditions>
<Condition
name='VersionFile' value="\\view\Build_NightlyDeveloper\filename2.cs">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>SpinFileVersionStats</ProcessName>
<Conditions>
<Condition
name='VersionFile' value="\\view\Build_NightlyDeveloper\filename3.cs">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>SpinFileVersionStats</ProcessName>
<Conditions>
<Condition
name='VersionFile' value="\\view\Build_NightlyDeveloper\filename4.h">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>SpinFileVersionStats</ProcessName>
<Conditions>
<Condition
name='VersionFile' value="\\view\Build_NightlyDeveloper\filename5.cs">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>SpinFileVersionStats</ProcessName>
<Conditions>
<Condition
name='VersionFile' value="\\view\Build_NightlyDeveloper\filename6.cs">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>SpinFileVersionStats</ProcessName>
<Conditions>
<Condition
name='VersionFile' value="\\view\Build_NightlyDeveloper\filename7.cs">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>SpinISProjectVersionStats</ProcessName>
<Conditions>
<Condition
name='ProductName' value="123">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>SpinISProjectVersionStats</ProcessName>
<Conditions>
<Condition
name='ProductName' value="345">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>SpinISProjectVersionStats</ProcessName>
<Conditions>
<Condition
name='ProductName' value="abc">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
</build>
<build>
<BuildMachine>mach-64</BuildMachine>
<Process>
<ProcessName>BuildLogStats</ProcessName>
<Conditions>
<Condition
name='BuildArea' value="D:\Retail\nightly_VS17">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>CopyAlgorithmRepositoryBuildStats</ProcessName>
<Conditions>
<Condition
name='Destination' value="D:\Retail\nightly_VS17\Retail\bin">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Success</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
<Process>
<ProcessName>GetSWStats</ProcessName>
<Conditions>
<Condition
name='DestinationPath' value="D:\Retail\nightly_VS17">
<SuccessCriteria>
<field>UpdateRequired</field>
<comparison>equal</comparison>
<value>YES</value>
</SuccessCriteria>
</Condition>
<Condition
name='DestinationPath' value="D:\Retail\nightly_VS17">
<SuccessCriteria>
<field>Status</field>
<comparison>equal</comparison>
<value>Successful</value>
</SuccessCriteria>
</Condition>
</Conditions>
</Process>
</build>
</BuildVerification>
I updated my code from last posting. You do not need to cast to string in foreach because all items are already string.