0

Below is an example of the xml file that I need to pull data via C#. This is my first experience with reading xml files and a beginner with xml. Anyone have an example of how I would find/load the fieldorder values for Export_B?

<?xml version="1.0" encoding="utf-8"?>
<Config>
    <OutFolderCSV>c:\Output\2012\upload_Files</OutFolderCSV>
    <OutFolderImage>c:\Output\2012\NM_Scorecard_Images</OutFolderImage>
    <PathOutLogFile>c:\Output\2012\Log\Matches.log</PathOutLogFile>
    <FieldSeparator>,</FieldSeparator>
    <ExportFile>
    <Name>Export_A</Name>
    <FieldOrder>matchID</FieldOrder>
    <FieldOrder>contactID</FieldOrder>
        <FieldOrder>stageID13</FieldOrder>
        <FieldOrder>stringScore1a</FieldOrder>
        <FieldOrder>xScore1a</FieldOrder>
    <FieldOrder>stageID14</FieldOrder>
        <FieldOrder>stringScore1b</FieldOrder>
        <FieldOrder>xScore1b</FieldOrder>
    <FieldOrder>stageID15</FieldOrder>
        <FieldOrder>stringScore1c</FieldOrder>
        <FieldOrder>xScore1c</FieldOrder>
    </ExportFile>
    <ExportFile>
    <Name>Export_B</Name>
    <FieldOrder>matchID</FieldOrder>
    <FieldOrder>contactID</FieldOrder>
        <FieldOrder>stageID16</FieldOrder>
        <FieldOrder>stringScore1a</FieldOrder>
        <FieldOrder>xScore1a</FieldOrder>
    <FieldOrder>stageID17</FieldOrder>
        <FieldOrder>stringScore1b</FieldOrder>
        <FieldOrder>xScore1b</FieldOrder>
    <FieldOrder>stageID18</FieldOrder>
        <FieldOrder>stringScore1c</FieldOrder>
        <FieldOrder>xScore</FieldOrder>
   </ExportFile>
</Config>
John Saunders
  • 160,644
  • 26
  • 247
  • 397

2 Answers2

0

Using LINQ to XML:

var doc = XDocument.Load(@"c:\path\to\file.xml");
var fieldOrders =
    from exportFile in doc.Descendants("ExportFile")
    where (string)exportFile.Element("Name") == "Export_B"
    from fieldOrder in exportFile.Elements("FieldOrder")
    select (string)fieldOrder;
Jeff Mercado
  • 129,526
  • 32
  • 251
  • 272
  • Thanks Jeff - the var Doc is creating an error... "The name 'XDocument' does not exist in the current context". Any ideas why this might occur? – BuckeyeJane Oct 28 '12 at 19:26
  • Add System.Code.dll into your project and add using System.Linq to the file. It should work then. – abhishek Oct 28 '12 at 19:32
-1

I have written an article http://www.codeproject.com/Articles/33769/Basics-of-LINQ-Lamda-Expressions

on XML using XDocument object.

You can parse the XML easily using

XDocument.Load(filepath)

Please read the section XLinq to parse the objects.

edit :

You can change value of Export_B using the code :

var document = XDocument.Load(filepath)
var exportFiles = document.Descandants("ExportFile");
List<XElement> list = new List<XElement>();
foreach(var element in exportFiles)
{
     list.Add(element);

// Now you can do element.Element("Name") to get the name. Put a breakpoint on this, you can get the reference of all underlying objects.
    }
abhishek
  • 2,975
  • 23
  • 38
  • Thanks. I may not have explained the best. I would like to load only the FieldOrder into a list internally that can be used within the program. But since there are multip Export Files listed I am not sure how to point to the Correct export name and then load the FieldOrder for that export name into program memory... – BuckeyeJane Oct 28 '12 at 18:16
  • Do you want to enumerate ExportFile objects ? You can enumerate ExportFile and get reference of each underlying collection of FieldOrders. – abhishek Oct 28 '12 at 18:23
  • Abhishek - I am trying to use but getting an error. "Cannot assign void to an implicitly-typed local variable on document". My code resembles: XmlDocument XDocument = new XmlDocument(); var document = XDocument.Load(profilePath); var exportFiles = document.Descandants("ExportFile"); – BuckeyeJane Oct 28 '12 at 19:20
  • @BuckeyeJane You need to create object of XDocument not XmlDocument. XDocument is Linq to XML. Check it out please. – abhishek Oct 28 '12 at 19:30
  • I didn't realize you were using linq. Never used that before either. But in looking further - I was missing: using System.Xml.Linq; I'll continue Thanks! – BuckeyeJane Oct 28 '12 at 19:38