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

标签 sql xml sql-server-2005

是否有任何技巧可以防止 SQL Server 实体化 &、< 和 > 等字符?我试图在我的 XML 文件中输出一个 URL,但 SQL 想要用 '&'

替换任何 '&'

进行以下查询:

SELECT 'http://foosite.com/' + RTRIM(li.imageStore)
        + '/ImageStore.dll?id=' + RTRIM(li.imageID)
        + '&raw=1&rev=' + RTRIM(li.imageVersion) AS imageUrl
FROM ListingImages li
FOR XML PATH ('image'), ROOT ('images'), TYPE

我得到的输出是这样的(&s 是实体化的):

<images>
  <image>
    <imageUrl>http://foosite.com/pics4/ImageStore.dll?id=7E92BA08829F6847&amp;raw=1&amp;rev=0</imageUrl>
  </image>
</images>

我想要的是这个(&s 未实体化):

<images>
  <image>
    <imageUrl>http://foosite.com/pics4/ImageStore.dll?id=7E92BA08829F6847&raw=1&rev=0</imageUrl>
  </image>
</images>

如何防止 SQL Server 将“&”实体化为“&”?

最佳答案

在某些情况下,人们可能不想要格式良好的 XML - 我(可能还有原始发帖人)遇到的情况是使用 For XML Path 技术通过递归查询返回“子”项的单个字段列表。有关此技术的更多信息,请参见此处(特别是在“黑盒 XML 方法”部分): Concatenating Row Values in Transact-SQL

就我的情况而言,看到“H&E”(病理染色)转换为“格式良好的 XML”真是令人失望。幸运的是,我找到了一个解决方案......下一页帮助我相对轻松地解决了这个问题,而无需重新构建我的递归查询或在表示级别添加额外的解析(为此以及我 child 的其他/ future 情况) -rows 数据字段包含保留的 XML 字符):Handling Special Characters with FOR XML PATH


编辑:下面引用的博客文章中的代码。

select
  stuff(
     (select ', <' + name + '>'
     from sys.databases
     where database_id > 4
     order by name
     for xml path(''), root('MyString'), type
     ).value('/MyString[1]','varchar(max)')
   , 1, 2, '') as namelist;

关于sql - 在 SQL 2005 上使用 FOR XML PATH 时如何保留与号 (&),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/270948/

相关文章:

c# - 如何获得 XDocument 的独立副本?

xml - 将 Sql 表转换为 XML

xml - opencv数据通过xml存储到excel?

database - 从 .bak 文件还原 sql 数据库时出错

sql - 获取 SQL Server 中某列具有最大值的行

sql - Symfony2 Doctrine 查询生成器中的 IFNULL

sql - 如何在sql中写这个查询

sql - 为什么postgresql在这个查询中不使用索引

mysql - 多行出现次数总和的SQL查询

SQL Server 查询以合并日期