将字符串转换为 XML

Convert String To XML

如何将下面的字符串转换为 XML,

SET @string = '<Field>
<Field Name="'+@Cname+'">
<DataField>'+@Cname+'</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>'

我尝试了 SET @xmlstring = CONVERT(XML,@string) 但它显示以下错误 消息 9459,级别 16,状态 1,第 17 行 XML 解析:第 4 行,字符 13,未声明的前缀

您的 xml 需要正确格式化。

尝试使用“/”关闭带有 prop Name 的标签字段,并去掉 TypeName 中的前缀 rd。

SET @string = '<Field>
<Field Name="'+@Cname+'" />
<DataField>'+@Cname+'</DataField>
<TypeName>System.String</TypeName>
</Field>'

http://sqlfiddle.com/#!18/9eecb/8282/0

哦不!切勿通过字符串连接创建 XML!想象一下,您的变量带有 this -> valueTim, 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>