SQL Server
SQL Server
XML Sort by Content
See more XML Examples
Demonstrates the SortByContent method.The input XML, available at http://www.chilkatsoft.com/data/fruitSort2.xml, is this:
<root>
<fruits>
<apples>
<apple>fuji</apple>
<apple>gala</apple>
<apple>granny smith</apple>
<apple>honeycrisp</apple>
<apple>mcintosh</apple>
</apples>
<fruit>banana</fruit>
<fruit>blackberry</fruit>
<fruit>blueberry</fruit>
<fruit>orange</fruit>
<fruit>pear</fruit>
</fruits>
</root>
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
DECLARE @xSortRoot int
-- The sample input XML is available at http://www.chilkatsoft.com/data/fruitSort2.xml
EXEC sp_OAMethod @xml, 'LoadXmlFile', @success OUT, 'fruitSort2.xml'
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @xml, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @xml
RETURN
END
-- Sort the direct children under the "fruits" node by tag:
EXEC sp_OAMethod @xml, 'FindChild', @xSortRoot OUT, 'fruits'
-- Sort in ascending order.
DECLARE @bAscending int
SELECT @bAscending = 1
EXEC sp_OAMethod @xSortRoot, 'SortByContent', NULL, @bAscending
-- Show the result:
EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
PRINT @sTmp0
-- Note: The "apples" node contains child nodes, but its
-- text content is 0-length (empty). Therefore, when sorting in
-- ascending order, it will be positioned before the direct
-- children containing non-empty content.
-- <root>
-- <fruits>
-- <apples>
-- <apple>granny smith</apple>
-- <apple>gala</apple>
-- <apple>fuji</apple>
-- <apple>mcintosh</apple>
-- <apple>honeycrisp</apple>
-- </apples>
-- <fruit>banana</fruit>
-- <fruit>blackberry</fruit>
-- <fruit>blueberry</fruit>
-- <fruit>orange</fruit>
-- <fruit>pear</fruit>
-- </fruits>
-- </root>
-- Sort the direct children under the "apples" node:
EXEC sp_OAMethod @xSortRoot, 'FindChild2', @success OUT, 'apples'
EXEC sp_OAMethod @xSortRoot, 'SortByContent', NULL, @bAscending
EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
PRINT @sTmp0
-- <root>
-- <fruits>
-- <apples>
-- <apple>fuji</apple>
-- <apple>gala</apple>
-- <apple>granny smith</apple>
-- <apple>honeycrisp</apple>
-- <apple>mcintosh</apple>
-- </apples>
-- <fruit>banana</fruit>
-- <fruit>blackberry</fruit>
-- <fruit>blueberry</fruit>
-- <fruit>orange</fruit>
-- <fruit>pear</fruit>
-- </fruits>
-- </root>
EXEC @hr = sp_OADestroy @xSortRoot
EXEC @hr = sp_OADestroy @xml
END
GO