Sql server 在SQL中创建XML(对于XML显式)
需要一些帮助来在SQLServer中创建一些XML 生成的XML应如下所示:Sql server 在SQL中创建XML(对于XML显式),sql-server,xml,cdata,for-xml-path,for-xml-explicit,Sql Server,Xml,Cdata,For Xml Path,For Xml Explicit,需要一些帮助来在SQLServer中创建一些XML 生成的XML应如下所示: <?xml version="1.0" encoding="utf-8"?> <Root Version="2.17" KFZ="XX-DD 389"> <Head name="ExecuteAnswer"> <Key name="AnswerStatus" value="-OK" /> <Key name="MsgId"><![CD
<?xml version="1.0" encoding="utf-8"?>
<Root Version="2.17" KFZ="XX-DD 389">
<Head name="ExecuteAnswer">
<Key name="AnswerStatus" value="-OK" />
<Key name="MsgId"><![CDATA[KFHB0907896aAUH223]]></Key>
<Section name="Command">
<Key name="Name" value="SetNewCommand" />
<Key name="Param0"><![CDATA[XX-DD 389]]></Key>
<Key name="Param1"><![CDATA[]]></Key>
<Key name="Param2"><![CDATA[0987asfdsafhdsSS]]></Key>
<Key name="Param3"><![CDATA[0097aSSSHSDOPir0]]></Key>
</Section>
</Head>
<Data></Data>
</Root>
谁能帮我一下吗
问候Alex正如评论中指出的那样,没有理由再使用
CDATA
。。。它在语义上与正确转义的正常text()
节点完全相同
然而,有时遗留系统或第三方工具需要它
您必须知道:除了对NVARCHAR(MAX)
进行强制转换并手动附加它之外,没有机会将xml声明添加到xml中
因此,如果必须检查字符串,可以使用FOR XML PATH()
创建干净、简单的XML,将CDATA
创建为content
并执行简单的REPLACE
将这些占位符更改为CDATA
开头和结尾字符
但是:这是一种带有显式的方法
SELECT
1 AS Tag,
NULL AS Parent,
'2.17' AS [Root!1!Version],
'XX-DD 389' AS [Root!1!KFZ],
NULL AS [Head!2!name!Element],
NULL AS [Key!3!name],
NULL AS [Key!3!value],
NULL AS [Key!3!!CDATA],
NULL AS [Section!4!name],
NULL AS [Key!5!name],
NULL AS [Key!5!value],
NULL AS [Key!6!name],
NULL AS [Key!6!!CDATA]
UNION ALL
SELECT
2 as Tag,
1 as Parent,
NULL,
NULL,
'ExecuteAnswer',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
UNION ALL
SELECT
3 as Tag,
2 as Parent,
NULL,
NULL,
NULL,
'AnswerStatus',
'-OK',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
UNION ALL
SELECT
3 as Tag,
2 as Parent,
NULL,
NULL,
NULL,
'MsgId',
NULL,
'KFHB0907896aAUH223',
NULL,
NULL,
NULL,
NULL,
NULL
UNION ALL
SELECT
4 as Tag,
2 as Parent,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
'Command',
NULL,
NULL,
NULL,
NULL
UNION ALL
SELECT
5 as Tag,
4 as Parent,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
'Name',
'SetNewCommand',
NULL,
NULL
UNION ALL
SELECT
6 as Tag,
4 as Parent,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
'Param0',
'XX-DD 389'
FOR XML EXPLICIT
使用过时的选项EXPLICIT
的两个原因是CDATA
部分和一些fance名称空间问题。您是否知道,CDATA
本身已经过时了?SQL Server甚至不再支持这一点,并且在将其存储在本机XML中时将被隐式忽略。。。您真的需要这些CDATA
部分吗?是的,Iam发布的XML是预先确定的。所以我必须使用CDATA属性。谢谢Shnugo!
SELECT
1 AS Tag,
NULL AS Parent,
'2.17' AS [Root!1!Version],
'XX-DD 389' AS [Root!1!KFZ],
NULL AS [Head!2!name!Element],
NULL AS [Key!3!name],
NULL AS [Key!3!value],
NULL AS [Key!3!!CDATA],
NULL AS [Section!4!name],
NULL AS [Key!5!name],
NULL AS [Key!5!value],
NULL AS [Key!6!name],
NULL AS [Key!6!!CDATA]
UNION ALL
SELECT
2 as Tag,
1 as Parent,
NULL,
NULL,
'ExecuteAnswer',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
UNION ALL
SELECT
3 as Tag,
2 as Parent,
NULL,
NULL,
NULL,
'AnswerStatus',
'-OK',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
UNION ALL
SELECT
3 as Tag,
2 as Parent,
NULL,
NULL,
NULL,
'MsgId',
NULL,
'KFHB0907896aAUH223',
NULL,
NULL,
NULL,
NULL,
NULL
UNION ALL
SELECT
4 as Tag,
2 as Parent,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
'Command',
NULL,
NULL,
NULL,
NULL
UNION ALL
SELECT
5 as Tag,
4 as Parent,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
'Name',
'SetNewCommand',
NULL,
NULL
UNION ALL
SELECT
6 as Tag,
4 as Parent,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
'Param0',
'XX-DD 389'
FOR XML EXPLICIT