Add new XElements to existing XML file

Last post 05-08-2008 8:52 PM by Ruffone. 3 replies.

Sort Posts:

  • Add new XElements to existing XML file

    05-06-2008, 9:22 PM
    • Loading...
    • Ruffone
    • Joined on 09-20-2002, 6:53 AM
    • New York
    • Posts 127

     I am trying to lookup a track and append it to an existing list of tracks in an XML file but I am not having any success with my code. Could anyone help?

    Thanks

            Dim sPath = "c:\track.xml"
            Dim doc = New XmlDocument()
    
            If File.Exists(sPath) Then
                doc.Load(sPath)
      
                Dim data = From t In MyCTXHelper.ctx.Tracks Where t.trackId = trackName
    
                Dim track = From t In MyCTXHelper.ctx.Tracks Where t.trackId = trackName _
                            Select <track id=<%= t.trackId %>>
                                       <trackName><%= t.trackName %></trackName>
                                       <trackNumber><%= t.trackNumber %></trackNumber>
                                       <releaseYear><%= t.releaseYear %></releaseYear>
                                   </track>
    
                doc.Save(sPath)
  • Re: Add new XElements to existing XML file

    05-07-2008, 7:11 AM

    Hi Ruffone ,

    I do not find any code to do inserting from your post.

    So here is one good sample about how to insert element,

    //Create dummy XML to work

    var root = new XElement("parent",

        from i in new int[] { 1, 2, 3, 4, 5, 6 }

        select new XElement("child",

            new XAttribute("number", i)));

    This will create XML like,

    <?xmlversion="1.0"encoding="utf-8"?>

    <parent>

     <childnumber="1" />

     <childnumber="2" />

     <childnumber="3" />

     <childnumber="4" />

     <childnumber="5" />

     <childnumber="6" />

    </parent>

    //Get the element (child3)

    XElement child3 = root.Descendants("child").First(

        el => (int)el.Attribute("number") == 3);

    //Add element before the child3

    child3.AddBeforeSelf(new XElement("child25"));

    //Add sub-element to the child3

    child3.Add(new XElement("grandchild"));

    //Add element after the child3

    child3.AddAfterSelf(new XElement("child35"));

    //Add attribute to the child3

    child3.Add(new XAttribute("attr", "something"));

    //Change the existing attribute

    child3.SetAttributeValue("number", 100);



    After all these activities you will get the following output,

    <?xmlversion="1.0"encoding="utf-8"?>

    <parent>

     <childnumber="1" />

     <childnumber="2" />

     <child25 />

     <childnumber="100"attr="something">

        <grandchild />

     </child>

     <child35 />

     <childnumber="4" />

     <childnumber="5" />

     <childnumber="6" />

    </parent>

     

    Sincerely,
    Samu Zhang
    Microsoft Online Community Support

    Please remember to click “Mark as Answer” on the post that helps you, and to click “Unmark as Answer” if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.
  • Re: Add new XElements to existing XML file

    05-07-2008, 10:52 PM
    • Loading...
    • Ruffone
    • Joined on 09-20-2002, 6:53 AM
    • New York
    • Posts 127

    Samu Zhang thanks for your response,
    This is what I want to do. How would I add this entire "track" element to the document? Or do I have to string it togather node by xmlNode.

    Thanks

    <?xml version="1.0" encoding="utf-8"?>
    <tracks>
      <track id="40">
        <trackId>40</trackId>
        <trackName>Tell Me</trackName>
        <trackNumber>3</trackNumber>
        <releaseYear>2002</releaseYear>
        <performers>
          <performer>
            <personId>2</personId>
            <personName>Benie</personName>
            <artistFeaturing>N</artistFeaturing>
          </performer>
        </performers>
      </track>
    </tracks>
    
    
    
                    Dim dd = <track id="45">
                                 <trackId>45</trackId>
                                 <trackName>Tell Me</trackName>
                                 <trackNumber>5</trackNumber>
                                 <releaseYear>2002</releaseYear>
                                 <performers>
                                     <performer>
                                         <personId>2</personId>
                                         <personName>Benie</personName>
                                         <artistFeaturing>N</artistFeaturing>
                                     </performer>
                                 </performers>
     
                             </track>
    
     
  • Re: Add new XElements to existing XML file

    05-08-2008, 8:52 PM
    Answer
    • Loading...
    • Ruffone
    • Joined on 09-20-2002, 6:53 AM
    • New York
    • Posts 127

    XDocument instead of XmlDocument made all the difference. This now works

            Dim sPath = "c:\track.xml"
            Dim doc As XDocument
    
            If File.Exists(sPath) Then
                doc = XDocument.Load(sPath)
      
                Dim data = From t In MyCTXHelper.ctx.Tracks Where t.trackId = trackName
    
                Dim track = From t In MyCTXHelper.ctx.Tracks Where t.trackId = trackName _
                            Select <track id=<%= t.trackId %>>
                                       <trackName><%= t.trackName %></trackName>
                                       <trackNumber><%= t.trackNumber %></trackNumber>
                                       <releaseYear><%= t.releaseYear %></releaseYear>
                                   </track>
    
                Dim Tracks = doc.<tracks>.<track>
                Tracks.Last().AddAfterSelf(track)
                doc.Save(sPath)

     

Page 1 of 1 (4 items)