SQL Server
SQL Server
Remove an XML Subtree
See more XML Examples
Demonstrates how to remove an XML subtree from an XML document.Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
DECLARE @xml int
EXEC @hr = sp_OACreate 'Chilkat.Xml', @xml OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @xml, 'LoadXmlFile', @success OUT, 'qa_data/xml/osszes.xml'
-- The XML file we're loading contains this:
-- <?xml version="1.0" encoding="iso-8859-2" ?>
-- <EXAMPLE>
-- <OSSZES>
-- <ROW TYPE="INS">477953
-- <NUMBER>05107003972</NUMBER>
-- </ROW>
-- <ROW TYPE="INS">477954
-- <NUMBER>05107001342</NUMBER>
-- </ROW>
-- <ROW TYPE="INS">477955
-- <NUMBER>05107001342</NUMBER>
-- </ROW>
-- <ROW TYPE="INS">477956
-- <NUMBER>05107000017</NUMBER>
-- </ROW>**
-- <ROW TYPE="INS">477957
-- <NUMBER>05107002182</NUMBER>
-- </ROW>
-- </OSSZES>
-- </EXAMPLE>
--
-- We wish to remove this subtree:
-- <ROW TYPE="INS">477956
-- <NUMBER>05107000017</NUMBER>
-- </ROW>
-- Get another reference to the XML document.
DECLARE @xml2 int
EXEC sp_OAMethod @xml, 'GetSelf', @xml2 OUT
-- Navigate to the node that is the root of the subtree to be deleted.
-- In this case, we wish to find the node having tag "ROW" with content "477956"
DECLARE @notUsed nvarchar(4000)
EXEC sp_OAMethod @xml2, 'ChilkatPath', @notUsed OUT, 'OSSZES|/C/ROW,*477956*|$'
-- Examine the xml2, it should be just the subtree.
EXEC sp_OAMethod @xml2, 'GetXml', @sTmp0 OUT
PRINT @sTmp0
-- Now detach xml2 from the it's XML document.
-- xml2 will now be it's own XML document.
EXEC sp_OAMethod @xml2, 'RemoveFromTree', NULL
-- Examine our original XML document. The subtree is removed:
EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @xml2
EXEC @hr = sp_OADestroy @xml
END
GO