回答

收藏

如何在SQL 2005上使用FOR XML PATH时保留与号(&)

技术问答 技术问答 473 人阅读 | 0 人回复 | 2023-09-14

是否有任何技巧可防止SQL Server诱使像&,这样的字符?我正在尝试在XML文件中输出URL,但是SQL希望将所有’&’替换为’ &‘6 s! J3 \& A$ L4 a. B
进行以下查询:" e# `/ ^% ]4 D
SELECT 'http://foosite.com/' + RTRIM(li.imageStore)
6 _- P& k8 o" J5 A$ @  z0 j        + '/ImageStore.dll?id=' + RTRIM(li.imageID)
$ T/ \' C. T; ?        + '&raw=1&rev=' + RTRIM(li.imageVersion) AS imageUrl" {# x9 K# g5 D  Z% Y
FROM ListingImages li
- {& Y) h" Z7 e9 @FOR XML PATH ('image'), ROOT ('images'), TYPE
, }( }5 t4 ^0 f; ^2 u9 L& |5 I我得到的输出是这样的(&s已被entented):+ y' N* q  @$ x
& k+ Y, @/ l* f7 y; e, e
  8 |' B% O% @3 F8 C
    http://foosite.com/pics4/ImageStore.dll?id=7E92BA08829F6847&raw=1&rev=0
: n; \1 S- z. a1 k/ {( h4 H  

) |  y- e6 ]% I3 D! @! W- I0 x
$ p& P/ O2 m8 \( I4 [! q# Z
我想要的是这个(&s没有被entented):* Q+ J  I4 d# V' _

/ Y0 P% H, f: s# e+ Q4 N0 S  7 Q6 o/ f/ d. F! B: h! q  |
    http://foosite.com/pics4/ImageStore.dll?id=7E92BA08829F6847&raw=1&rev=0
/ F1 |4 @9 O( G3 }' |  

( K# c& H3 x) f
; I4 j# [, U( N7 S5 m
如何防止SQL Server将’&’转换为’ &‘?! M2 L! H! }: x+ D7 e; W
               
% W2 l  v" ~, l8 Z7 C( j解决方案:
/ j' U6 {8 P. z# r               
% y7 @, S7 V7 i/ [" A" k
+ K0 ?- t) f/ m* u, I  ~! r
, b( L) h  S5 v                SQL
, o  a0 o4 v! [# hServer生成的内容正确。您期望看到的不是格式正确的XML。原因是&字符表示实体引用的开始,例如&。有关更多信息,请参见XML规范。
5 j+ t+ C$ J: i: g当您的XML解析器从XML解析此字符串时,它将理解&实体引用并以所需的形式返回文本。因此,除非您使用错误的XML解析器或尝试手动解析它,否则XML文件中的内部格式不会给您造成问题(在这种情况下,当前的解析器代码目前相对于XML而言实际上是错误的)规格)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则