Results 1 to 6 of 6

Thread: Setting the value of an XML node among nodes with the same name

  1. #1

    Thread Starter
    Frenzied Member
    Join Date
    Jul 2006
    Location
    MI
    Posts
    2,012

    Setting the value of an XML node among nodes with the same name

    Suppose I have the following XML string:

    Code:
                                           <PartOverrides>
                                               <PartOverride>
                                                   <Name>Cab.Case.LF</Name>
                                                   <Parameter>
                                                       <Name>BAND</Name>
                                                       <Type>T</Type>
                                                       <Value>NEE</Value></Parameter></PartOverride>
                                               <PartOverride>
                                                   <Name>Cab.Case.RF</Name>
                                                   <Parameter>
                                                       <Name>BAND</Name>
                                                       <Type>T</Type>
                                                       <Value>NNEE</Value></Parameter></PartOverride>
                                               <PartOverride>
                                                   <Name>Cab.Interior.PT</Name>
                                                   <Thickness>19.000</Thickness>
                                                   <Material>R000300</Material></PartOverride>
                                               <PartOverride>
                                                   <Name>Cab.Interior.PT@2</Name>
                                                   <Thickness>19.000</Thickness>
                                                   <Material>R000300</Material></PartOverride>
                                               <PartOverride>
                                                   <Name>Cab.Face.DWR_OPEN.DBOX.DWR.S_DSLAB</Name>
                                                   <Shape><template firstid="1" unit="mm"><geometry><entity id="1" type="line2d"><end><x>604.8325</x></end><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity><entity id="2" type="line2d"><begin><x>604.8325</x></begin><end><x>604.8325</x><y>349.245</y></end><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity><entity id="3" type="line2d"><begin><y>349.245</y></begin><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity><entity id="4" type="line2d"><begin><x>604.8325</x><y>349.245</y></begin><end><y>349.245</y></end><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity></geometry></template></Shape></PartOverride>
                                               <PartOverride>
                                                   <Name>[email protected]_DSLAB</Name>
                                                   <Shape><template firstid="1" unit="mm"><geometry><entity id="1" type="line2d"><end><x>604.8325</x></end><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity><entity id="2" type="line2d"><begin><x>604.8325</x></begin><end><x>604.8325</x><y>349.245</y></end><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity><entity id="3" type="line2d"><begin><y>349.245</y></begin><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity><entity id="4" type="line2d"><begin><x>604.8325</x><y>349.245</y></begin><end><y>349.245</y></end><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity></geometry></template></Shape></PartOverride>
                                           </PartOverrides>
    How would I set the value of the <Material> node under the 3rd <PartOverride> node? (Highlighted above)
    The string above is part of a larger XML string that is defined as an XElement. The kicker is that the 3rd <PartOverride> node may not always be 3rd, so I think you would have to get the node based on the value in the <Name> node...
    Last edited by nbrege; Jun 26th, 2024 at 02:56 PM.

  2. #2
    Powered By Medtronic dbasnett's Avatar
    Join Date
    Dec 2007
    Location
    Jefferson City, MO
    Posts
    9,897

    Re: Setting the value of an XML node among nodes with the same name

    This works.

    Code:
            Dim xe As XElement = <PartOverrides>
                                     <PartOverride>
                                         <Name>Cab.Case.LF</Name>
                                         <Parameter>
                                             <Name>BAND</Name>
                                             <Type>T</Type>
                                             <Value>NEE</Value></Parameter></PartOverride>
                                     <PartOverride>
                                         <Name>Cab.Case.RF</Name>
                                         <Parameter>
                                             <Name>BAND</Name>
                                             <Type>T</Type>
                                             <Value>NNEE</Value></Parameter></PartOverride>
                                     <PartOverride>
                                         <Name>Cab.Interior.PT</Name>
                                         <Thickness>19.000</Thickness>
                                         <Material>R000300</Material></PartOverride>
                                     <PartOverride>
                                         <Name>Cab.Interior.PT@2</Name>
                                         <Thickness>19.000</Thickness>
                                         <Material>R000300</Material></PartOverride>
                                     <PartOverride>
                                         <Name>Cab.Face.DWR_OPEN.DBOX.DWR.S_DSLAB</Name>
                                         <Shape><template firstid="1" unit="mm"><geometry><entity id="1" type="line2d"><end><x>604.8325</x></end><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity><entity id="2" type="line2d"><begin><x>604.8325</x></begin><end><x>604.8325</x><y>349.245</y></end><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity><entity id="3" type="line2d"><begin><y>349.245</y></begin><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity><entity id="4" type="line2d"><begin><x>604.8325</x><y>349.245</y></begin><end><y>349.245</y></end><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity></geometry></template></Shape></PartOverride>
                                     <PartOverride>
                                         <Name>[email protected]_DSLAB</Name>
                                         <Shape><template firstid="1" unit="mm"><geometry><entity id="1" type="line2d"><end><x>604.8325</x></end><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity><entity id="2" type="line2d"><begin><x>604.8325</x></begin><end><x>604.8325</x><y>349.245</y></end><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity><entity id="3" type="line2d"><begin><y>349.245</y></begin><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity><entity id="4" type="line2d"><begin><x>604.8325</x><y>349.245</y></begin><end><y>349.245</y></end><parameters><parameter name="_PROFTYPE"><value type="4">1</value></parameter></parameters></entity></geometry></template></Shape></PartOverride>
                                 </PartOverrides>
    
            Dim ie As IEnumerable(Of XElement)
            ie = From el In xe...<PartOverride> Skip 2 Take 1 Select el
    
            If ie.Count = 1 Then
                ie(0).<Material>.Value = "123456789"
            End If
    My First Computer -- Documentation Link (RT?M) -- Using the Debugger -- Prime Number Sieve
    Counting Bits -- Subnet Calculator -- UI Guidelines -- >> SerialPort Answer <<

    "Those who use Application.DoEvents have no idea what it does and those who know what it does never use it." John Wein

  3. #3

    Thread Starter
    Frenzied Member
    Join Date
    Jul 2006
    Location
    MI
    Posts
    2,012

    Re: Setting the value of an XML node among nodes with the same name

    Quote Originally Posted by dbasnett View Post
    This works.
    Thank you for the quick reply. You may not have noticed, but I edited my original post to add more info. The particular node I want to change may not always be in the 3rd node, so I think you would have to get the desired parent node by the value in the <Name> node. I hope that makes sense. My apologies for not being more precise with what I want to do...
    Last edited by nbrege; Jun 26th, 2024 at 03:10 PM.

  4. #4
    PowerPoster techgnome's Avatar
    Join Date
    May 2002
    Posts
    34,687

    Re: Setting the value of an XML node among nodes with the same name

    What about hte name node? Should be able to use that to pull the parent PartOverride

    -tg
    * I don't respond to private (PM) requests for help. It's not conducive to the general learning of others.*
    * I also don't respond to friend requests. Save a few bits and don't bother. I'll just end up rejecting anyways.*
    * How to get EFFECTIVE help: The Hitchhiker's Guide to Getting Help at VBF - Removing eels from your hovercraft *
    * How to Use Parameters * Create Disconnected ADO Recordset Clones * Set your VB6 ActiveX Compatibility * Get rid of those pesky VB Line Numbers * I swear I saved my data, where'd it run off to??? *

  5. #5

    Thread Starter
    Frenzied Member
    Join Date
    Jul 2006
    Location
    MI
    Posts
    2,012

    Re: Setting the value of an XML node among nodes with the same name

    Quote Originally Posted by techgnome View Post
    What about hte name node? Should be able to use that to pull the parent PartOverride

    -tg
    Yes, that's what I mentioned in the edit of my original post, but I'm not sure how to do it...

  6. #6
    Powered By Medtronic dbasnett's Avatar
    Join Date
    Dec 2007
    Location
    Jefferson City, MO
    Posts
    9,897

    Re: Setting the value of an XML node among nodes with the same name

    Quote Originally Posted by nbrege View Post
    Thank you for the quick reply. You may not have noticed, but I edited my original post to add more info. The particular node I want to change may not always be in the 3rd node, so I think you would have to get the desired parent node by the value in the <Name> node. I hope that makes sense. My apologies for not being more precise with what I want to do...
    Just change the query.

    Code:
            Dim ie As IEnumerable(Of XElement)
            ie = From el In xe...<PartOverride> Where el.<Name>.Value = "Cab.Interior.PT" Select el Take 1
    
            If ie.Count = 1 Then
                ie(0).<Material>.Value = "123456789"
            End If
    My First Computer -- Documentation Link (RT?M) -- Using the Debugger -- Prime Number Sieve
    Counting Bits -- Subnet Calculator -- UI Guidelines -- >> SerialPort Answer <<

    "Those who use Application.DoEvents have no idea what it does and those who know what it does never use it." John Wein

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width