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...
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
Re: Setting the value of an XML node among nodes with the same name
Quote:
Originally Posted by
dbasnett
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...
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
Re: Setting the value of an XML node among nodes with the same name
Quote:
Originally Posted by
techgnome
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...
Re: Setting the value of an XML node among nodes with the same name
Quote:
Originally Posted by
nbrege
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