sqlxml中的感叹号
我在尝试添加具有非法字符的元素时遇到问题。我有以下SQLsqlxml中的感叹号,sql,xml,Sql,Xml,我在尝试添加具有非法字符的元素时遇到问题。我有以下SQL SELECT 'en-GB' AS '@xml:lang', '20120217164611.1712._3FO0ZXYQ3@GBRAPPCHL1' AS '@payloadID', '2012-02-17T16:46:11' AS '@timestamp', '1.2.014' AS '@version', ( SELECT ( SELECT /* FROM */ (SELECT 'TecSolExch
SELECT
'en-GB' AS '@xml:lang',
'20120217164611.1712._3FO0ZXYQ3@GBRAPPCHL1' AS '@payloadID',
'2012-02-17T16:46:11' AS '@timestamp',
'1.2.014' AS '@version',
( SELECT
( SELECT /* FROM */
(SELECT 'TecSolExchangeID' AS 'Credential/@domain', 33333 AS 'Credential/Identity'
FOR XML PATH(''), TYPE),
(SELECT 'name' AS 'Credential/@domain', 'Test Limited' AS 'Credential/Identity'
FOR XML PATH(''), TYPE)
FOR XML PATH('From'), TYPE ),
( SELECT /* TO */
(SELECT 'TecSolExchangeID' AS 'Credential/@domain', 66666 AS 'Credential/Identity'
FOR XML PATH(''), TYPE),
(SELECT 'name' AS 'Credential/@domain', 'Test Company' AS 'Credential/Identity'
FOR XML PATH(''), TYPE)
FOR XML PATH('To'), TYPE ),
( SELECT /* SENDER */
(SELECT 'TecSolExchangeID' AS 'Credential/@domain', 13041 AS 'Credential/Identity', '' AS 'Credential/SharedSecret'
FOR XML PATH(''), TYPE), ' cXML Link v1.3.0' AS 'UserAgent'
FOR XML PATH('Sender'), TYPE )
FROM TEST2.PORDER
WHERE POHNUM_0 = '2011302POH00000002'
FOR XML PATH('Header'),TYPE )
, ( SELECT 'production' AS '@deploymentMode',
( SELECT
( SELECT /* ShipNoticeHeader */
(SELECT ''
FOR XML PATH(''),
TYPE)
FOR XML PATH('ShipNoticeHeader'),
TYPE ),
( SELECT '' AS '@domain',
'' as 'CarrierIdentfier',
''AS 'ShipmentIdentifier'
FOR XML PATH('ShipControl'),
TYPE ),
(SELECT /* Ship Notice Portion */
(SELECT '1;29117/42' AS 'DocumentReference/@PayLoadID',
'' AS 'DocumentReference'
FOR XML PATH('OrderReference'),
TYPE),
(SELECT '4' AS '@Quantity',
'1' AS '@LineNo',
'Box 4' AS 'UnitOfMeasure'
FOR XML PATH('ShipNoticeItem'),
TYPE)
FOR XML PATH('ShipNoticePortion'),
TYPE)
FROM TEST2.PORDER
WHERE POHNUM_0 = '2011302POH00000002'
FOR XML PATH('ShipNoticeRequest'),
TYPE )
FROM TEST2.PORDER
WHERE POHNUM_0 = '2011302POH00000002'
FOR XML PATH('Request'),
TYPE)
FROM TEST2.PORDER
WHERE POHNUM_0 = '2011302POH00000002'
FOR XML PATH('?XML')
正如你所看到的,我在根字段中有一个问号。此操作失败并出现错误。
“?XML”包含XML所需的无效XML标识符;“?”0x003F是出现故障的第一个字符'
我的问题是我需要能够在中创建包含非法字符的元素。例如,我还需要另一个元素围绕消息,这将是。除了此字段有感叹号外,情况相同
这可能是第一步吗?如果可能的话,有人能帮我完成吗
提前感谢您不能将此作为For XML的一部分,但是您可以通过结合使用For XML和NVARCHAR操作来实现这一点 因此,如果您想添加DocType,因为您实际上正在生成HTML,您可以这样做:
select '<!DOCTYPE html>'
+ cast(
(
-- XML bit here
-- Replace this with your XML query.
select
A
from (
select 'a1' as A
union select 'a2'
) a
for xml path(''), root('Z'), type
)
as nvarchar(Max))
但是请注意,结果将不是适合SQL Server重新导入的XML
讨论
XML和HTML都是SGML的相关类型,但并不相同。HTML有XML没有的特性,XML有HTML没有的特性
您可以编写XML的子集,它也是HTML的子集,这通常很有用,但两者都不是另一个的子集。您是否考虑过,数据库层不是构建这样一个完全成熟的文档(实际上不是XML)的最明智的地方,因此XML设施正在与您斗争