Here's an alternative:
declare @children int
set @children = 4
SELECT
string,
STUFF(string, start_of_integer_value, CHARINDEX('<', string, start_of_integer_value) - start_of_integer_value,
CAST(@children AS varchar(10)))
FROM (
SELECT '<key>Children</key><integer>2</integer>' AS string UNION ALL
SELECT '<key>Children</key><integer>123</integer>' UNION ALL
SELECT '<key>Children</key><integer></integer>'
) AS test_data
CROSS APPLY (
SELECT CHARINDEX('<integer>', string) + 9 AS start_of_integer_value
) AS assign_alias_name
SQL DBA,SQL Server MVP(07, 08, 09) "It's a dog-eat-dog world, and I'm wearing Milk-Bone underwear." "Norm", on "Cheers". Also from "Cheers", from "Carla": "You need to know 3 things about Tortelli men: Tortelli men draw women like flies; Tortelli men treat women like flies; Tortelli men's brains are in their flies".