TSQL - 非法xml字符
问题描述:
我有一个返回XML的存储过程。 这是一个调查应用程序。TSQL - 非法xml字符
它遍历调查的所有问题和选择并返回XML。
但是,每当我尝试将问题文本包含在XML中时,我都会收到非法的xml字符错误。
我正在看所有的问题,并没有特殊字符,实际上唯一不是字母字符是问题结束的时期。
有什么我做错了吗?
这里是我的查询:
SET @root = (SELECT
CONVERT
(xml,
(
SELECT q.QuestionId '@questionId'
,q.DisplayOrder '@orderId'
,q.IsRequired '@required'
,q.Weight '@weight'
,CONVERT(xml,
(
SELECT
qc.QuestionId '@questionId'
,qc.DisplayOrder '@orderId'
,(SELECT REPLACE((SELECT REPLACE((SELECT REPLACE((SELECT REPLACE((SELECT REPLACE(qc.[Description] ,'&','&')),'''',''')),'"','"')),'<','<')),'>','>'))
FROM survey.Question qc
WHERE qc.QuestionId = q.QuestionId
FOR XML PATH ('question')
)
)
,CONVERT(xml,
(
SELECT
qc.QuestionChoiceId '@choiceId'
,qc.DisplayOrder '@orderId'
,qc.Weight '@weight'
,ISNULL(qc.Description,'') '@description'
FROM survey.QuestionChoice qc
WHERE qc.QuestionId = q.QuestionId
FOR XML PATH ('choice'), type, root('choices')
)
)
FROM survey.Question q
WHERE q.SectionId = @SectionId
FOR XML PATH('questionset')
)
))
如果我代替我的“消毒”的SELECT语句,并用硬编码的文本替换,我的查询工作正常。
以下是来自数据库的一些示例问题。
任何额外的评论或建议的赞赏:
的分类器 是礼貌和专业。
评分员提供了很好的理由 他们的评估。
答
那些(SELECT REPLACE((不需要SELECT REPLACE((...语句只是使用嵌套的替换功能,如:。
(REPLACE((REPLACE((REPLACE((REPLACE((REPLACE(qc.[Description] ,'&','&')),'''',''')),'"','"')),'<','<')),'>','>'))
或用更少的括号:
(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([FileName] ,'&','&'),'''','''),'"','"'),'<','<'),'>','>'))
我们真的做一些触发问题的示例数据,并且不需要执行任何手动实体替换 –
为什么我不应该执行实体替换?是否自动处理?请参阅已更新的示例数据问题 – Mark
是的,工具需要关心XML ES遮盖要求 - 例如运行'选择'A&B'作为xml路径的[@fido],root('def')'并检查输出。通过示例数据,我希望创建一些完整的脚本来创建一些表结构(表变量通常可以工作)并插入。优选地,在减少的一组列上(然后用减少的查询)这足以证明相同的错误 - 例如, a [mcve] –