在SQL中使用CAST中的&符号

edo*_*oft 3 xml sql sql-server casting ampersand

SQL客户端上的以下代码段在"&"上失败:

select cast('<name>Spolsky & Atwood</name>' as xml)
Run Code Online (Sandbox Code Playgroud)

有没有人知道解决方法?

更长的解释,我需要更新XML列中的一些数据,并且我通过将XML值转换为varchar来使用搜索和替换类型hack,使用此强制转换来替换和更新XML列.

Joh*_*ers 6

它不是有效的XML.用途&amp;:

select cast('<name>Spolsky &amp; Atwood</name>' as xml)
Run Code Online (Sandbox Code Playgroud)

  • 我相信你的XML实体"&amp;" 已被Stack Overflow的"&"取代.非常棘手. (2认同)

Qua*_*noi 5

select cast('<name>Spolsky &amp; Atwood</name>' as xml)
Run Code Online (Sandbox Code Playgroud)

标准XML不允许标记内的文字&符号XML,并且任何XML解析器都无法解析此类文档.

An XMLSerializer()将输出&符号 - HTML编码.

以下代码:

using System.Xml.Serialization;

namespace xml
{
    public class MyData
    {
        public string name = "Spolsky & Atwood";
    }

    class Program
    {
        static void Main(string[] args)
        {
            new XmlSerializer(typeof(MyData)).Serialize(System.Console.Out, new MyData());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

将输出以下内容:

<?xml version="1.0" encoding="utf-8"?>
<MyData
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <name>Spolsky &amp; Atwood</name>
</MyData>
Run Code Online (Sandbox Code Playgroud)

,&amp;而不是&.

  • 如果您的XML包含未转义的&-characters,那么基本上是无效的XML,您真的应该努力修复它. (2认同)