Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Getting attribute from xml and printing it error

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

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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>

>Solution :

I updated my code from last posting. You do not need to cast to string in foreach because all items are already string.

using System;
using System.Linq;
using System.Collections.Generic;
using System.Data;
using System.Xml;
using System.Xml.Linq;
using System.Text;

namespace ConsoleApp10
{

    class Program
    {
        static string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument xDoc = XDocument.Load(FILENAME);
            var results = xDoc.Descendants("build")
                .SelectMany(x => x.Descendants("Process")
                .SelectMany(y => y.Descendants("SuccessCriteria")
                .Select(z => new
                {
                    buildMach = (string)x.Element("BuildMachine"),
                    p1 = (string)y.Element("ProcessName"),
                    name = (string)y.Attribute("name"),
                    value = (string)y.Attribute("value"),
                    cName = (string)x.Descendants("Condition").FirstOrDefault().Attribute("name"),
                    cValue = (string)x.Descendants("Condition").FirstOrDefault().Attribute("value"),
                    f1 = (string)z.Element("field"),
                    c1 = (string)z.Element("comparison"),
                    v1 = (string)z.Element("value")
                }))).ToList();
            foreach (var cur in results)
            {
                Console.WriteLine("build_machine='{0}', process_name='{1}', name='{2}', loc='{3}', condition name='{4}', condition value = '{5}', field='{6}', comparison='{7}', value='{8}'", 
                    cur.buildMach, cur.p1, cur.name, cur.value, cur.cName, cur.cValue, cur.f1, cur.c1, cur.v1);

            }
        }
    }

}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading