包含 & 符号的 XML 中断了 SQL XML 架构验证

XML containing Ampersand, breaks SQL XML Schema validation

提问人:AdzzzUK 提问时间:10/4/2022 更新时间:10/4/2022 访问量:37

问:

我有一个存储的进程,它正在接收 XML 作为输入。SQL 中的 XML 架构集合验证收到的 XML。

XML 字符串中引用的项之一是产品代码,这可能包含与号。我在尝试提取数据时尝试获取产品代码时收到错误。这是我目前正在使用的:

DECLARE @cursor CURSOR;
SET @cursor = CURSOR FAST_FORWARD READ_ONLY FOR
                SELECT Quotenbr = COALESCE(items.value('(@quotenbr)[1]', 'varchar(25)'), 'Skipped')
                     , QuotelineItem = COALESCE(items.value('(@quotelineitem)[1]', 'varchar(25)'), 'Skipped')
                     , Branch = COALESCE(items.value('(@branch)[1]', 'varchar(25)'), 'Skipped')
                     , Partnbr = items.value('(@partnbr)[1]','varchar(25)') --Part Number can contain & character, which breaks this - need alternate
                     , Qty = items.value('(@qty)[1]','decimal(9,2)')
                     , Unit = items.value('(@unit)[1]','nvarchar(25)')                  
                FROM @XMLString.nodes('/request/items/item') AS XTbl(items);
OPEN @cursor;

FETCH NEXT FROM @cursor 
 INTO @quotenbr
    , @quotelineitem
    , @Branch
    , @Partnbr
    , @qty
    , @unit;

代码无法正确处理 Partnbr 输入。当字符串包含 & 号时,我能做些什么让 partnbr 不中断吗?

我假设架构验证元素正在将 & 换成“&+amp;” - 有没有办法解决这个问题?

sql-server t-sql 存储过程 xml 分析

评论

2赞 Thom A 10/4/2022
你能在这里提供一个最小的可重现的例子吗?
0赞 AlwaysLearning 10/4/2022
您确实需要展示一个示例来证明破损,包括数据。我在这里所期望的是,当遇到原始数据中的字符时,生成源“XML”的任何内容都无法正确序列化实体。&&

答: 暂无答案