
Untitled
By: a guest on
Jun 26th, 2012 | syntax:
None | size: 2.15 KB | hits: 8 | expires: Never
MS SQL Server: What is the best way to determine if a given string is a valid XML or not?
declare @T table(ID int, Col1 nvarchar(1000))
insert into @T values
(1, 'No xml value 1'),
(2, 'No xml value 2'),
(3, '<root><item>Text value in xml</item></root>')
select
case when charindex('<item>', Col1) = 0
then Col1
else
substring(Col1, charindex('<item>', Col1)+6, charindex('</item>', Col1)-charindex('<item>', Col1)-6)
end
from @T
No xml value 1
No xml value 2
Text value in xml
DECLARE @table TABLE (myXML XML)
INSERT INTO @table
SELECT
'
<Employee>
<FirstName>Henry</FirstName>
<LastName>Ford</LastName>
</Employee>
'
SELECT myXML
FROM @table
FOR XML RAW
DECLARE @table TABLE (myXML XML)
INSERT INTO @table
SELECT
'
<Employee
<FirstName>Henry</FirstName>
<LastName>Ford</LastName>
</Employee>
'
SELECT myXML
FROM @table
FOR XML RAW
BEGIN TRY
DECLARE @myXML XML
SET @myXML = CAST
('
<Employee>
<FirstName>Henry</FirstName>
<LastName>Ford</LastName>
</Employee>
' AS XML)
SELECT 'VALID XML'
END TRY
BEGIN CATCH
SELECT 'INVALID XML'
END CATCH;
BEGIN TRY
DECLARE @myXML XML
SET @myXML = CAST
('
<Employee
<FirstName>Henry</FirstName>
<LastName>Ford</LastName>
</Employee>
' AS XML)
SELECT 'VALID XML'
END TRY
BEGIN CATCH
SELECT 'INVALID XML'
END CATCH;
CREATE XML SCHEMA COLLECTION UserSchemaCollection AS
N'<?xml version="1.0" encoding="UTF-16"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name = "User" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name = "UserID" />
<xsd:element name = "UserName" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>';
DECLARE @x XML(UserSchemaCollection)
SELECT @x = '<User><UserID>1234</UserID><UserName>Sebastian</UserName></User>'
DECLARE @y XML(UserSchemaCollection)
SELECT @y = '<User><UserName>Sebastian</UserName></User>'
DECLARE @z XML(UserSchemaCollection)
SELECT @z = 'Some text'