如何将以下字符串转换为XML,
SET @string = '<Field>
<Field Name="'+@Cname+'">
<DataField>'+@Cname+'</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>'
我尝试了SET @xmlstring = CONVERT(XML,@string)
,但它显示如下错误
Msg 9459,Level 16,State 1,Line 17
XML解析:第4行,第13个字符,未声明的前缀
答案 0 :(得分:2)
您的xml需要正确格式化。
尝试使用'/'关闭标记字段和prop名称,并在TypeName中取出前缀rd。
SET @string = '<Field>
<Field Name="'+@Cname+'" />
<DataField>'+@Cname+'</DataField>
<TypeName>System.String</TypeName>
</Field>'
答案 1 :(得分:2)
哦不!永远不要通过字符串连接创建XML!试想一下,你的变量带有this -> value
或Tim, Tom & Fred
之类的值......这可能会完美地运行,传递所有测试并在推出后出现未定义的错误。
始终使用SQL-Servers支持来创建XML:
DECLARE @cname VARCHAR(100)='Some Name';
DECLARE @xml XML=
(
SELECT @cname AS [Field/@Name]
,@cname AS [DataField]
,'System.String' AS [TypeName]
FOR XML PATH('Field')
);
SELECT @xml;
结果
<Field>
<Field Name="Some Name" />
<DataField>Some Name</DataField>
<TypeName>System.String</TypeName>
</Field>
WITH XMLNAMESPACES('Some.namespace.url' AS rd)
SELECT @xml=
(
SELECT @cname AS [Field/@Name]
,@cname AS [DataField]
,'System.String' AS [rd:TypeName]
FOR XML PATH('Field')
);
SELECT @xml
结果
<Field xmlns:rd="Some.namespace.url">
<Field Name="Some Name" />
<DataField>Some Name</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>