I have the following XML. I need to delete an entire node with Object Name = SubType111 depending upon the variable TestID Then I need to update the sequence field of all the subsequent nodes, subtract by 1
I am able to get the First Part right, but in the second part - I am not able to access all the subsequent nodes. Expected output is to remove the desired node and subtract 1 from the sequence field of subsequent nodes.
any inputs or pointers are greatly appreciated. Thank you.
------------------------XML ---------------------------
DECLARE @cartXML XML =
'<OBJECT CLASS="Test1" ID="-1" FULL="FULL" VERSION="1">
<FIELD NAME="OrderDate">20220619</FIELD>
<FIELD NAME="OrderParty">Individual</FIELD>
<FIELD NAME="ShipToID">34567</FIELD>
<FIELD NAME="ShipToAddress1">123 Test Street</FIELD>
<FIELD NAME="ShipToCity">TestCity</FIELD>
<FIELD NAME="ShipToState">IL</FIELD>
<FIELD NAME="ShipTocountry">USA</FIELD>
<FIELD NAME="TaxNumber">444</FIELD>
<FIELD NAME="DiscountCode">Summer22</FIELD>
<SUBTYPE NAME="SubType1">
<OBJECT NAME="SubType111" ID="-1">
<FIELD NAME="TestID">123</FIELD>
<FIELD NAME="Sequence">1</FIELD>
<FIELD NAME="ParentSequence">-1</FIELD>
<FIELD NAME="ExtID">-1</FIELD>
<FIELD NAME="ExtName">ABC</FIELD>
</OBJECT>
<OBJECT NAME="SubType111" ID="-1">
<FIELD NAME="TestID">223</FIELD>
<FIELD NAME="Sequence">2</FIELD>
<FIELD NAME="ParentSequence">1</FIELD>
<FIELD NAME="ExtID">-1</FIELD>
<FIELD NAME="ExtName">DEF</FIELD>
<FIELD NAME="__ExtendedData"><OBJECT
CLASS="Meet123" ID="-1" FULL="FULL"
VERSION="1"><FIELD
NAME="OrderDetailID">-1</FIELD><FIELD
NAME="OrderID">-1</FIELD><FIELD
NAME="Sequence">0</FIELD><FIELD
NAME="AttendeeID">123</FIELD><FIELD
NAME="AttendeeID_Name">Test, Mark/I
H 6</FIELD><FIELD
NAME="ShowList">1</FIELD><FIELD
NAME="BdgeName">Mark</FIELD><FIELD
NAME="BadgeCompanyName">I H 6</FIELD>
</OBJECT></FIELD>
</OBJECT>
<OBJECT NAME="SubType111" ID="-1">
<FIELD NAME="TestID">333</FIELD>
<FIELD NAME="Sequence">3</FIELD>
<FIELD NAME="ParentSequence">1</FIELD>
<FIELD NAME="ExtID">-1</FIELD>
<FIELD NAME="ExtName">GHI</FIELD>
</OBJECT>
</SUBTYPE>
<SUBTYPE NAME="SubType2"/>
<SUBTYPE NAME="SubType3"/>
</OBJECT>'
---TSQL
DECLARE @TestID as int,@sequenceId as int, @orderLineCount as int,@orderLineXML as XML
set @TestID = 223
-------------This works ----------------------------------------------------
--Select @cartXML as OriginalXML
--SET @cartXML.modify('delete
--/OBJECT/SUBTYPE/OBJECT[FIELD[@NAME="TestID"]/text()=sql:variable("@TestID")]')
--Select @cartXML as XMLAfterDeletion
---------------------------------------------------
------Update sequenceID of the subsequent nodes. Reduce by 1 ----------------------
select @sequenceId = c.value('(FIELD[@NAME="Sequence"]/text())[1]', 'INT'),
@orderLineCount =
@cartXML.value('count(/OBJECT/SUBTYPE[@NAME="SubType1"]
/OBJECT[@NAME="SubType111"])','int')
from
@cartXML.nodes('/OBJECT/SUBTYPE/OBJECT[FIELD[@NAME="TestID"]
/text()=sql:variable("@TestID")]') t1(c)
select @sequenceId as SequenceID, @orderLineCount as TotalOrderLines
-----------This part does not yield correct XML to be modified
if @orderLineCount > @sequenceId
select @cartXML.query('.') from
@cartXML.nodes('/OBJECT/SUBTYPE/OBJECT[FIELD[@NAME="Sequence"]/text()
>sql:variable("@sequenceId")]') t1(c)
where @cartXML.exist('/OBJECT/SUBTYPE/OBJECT[FIELD[@NAME="Sequence"]/text()
>sql:variable("@sequenceId")]') =1
Select @cartxMl as XMLtoModify
---Subtract 1 from the sequence ID of all the SubType111 nodes that follow the node -
--TestID =223