Pregunta

El siguiente fragmento de código en el servidor SQL 2005 falla en el signo '&':

select cast('<name>Spolsky & Atwood</name>' as xml)

¿Alguien sabe una solución?

explicación más larga, tengo que actualizar algunos datos en una columna XML, y estoy usando una búsqueda y reemplazar tipo truco echando el valor XML a un varchar, haciendo el reemplazar y actualizar la columna XML con este elenco.

¿Fue útil?

Solución

select cast('<name>Spolsky &amp; Atwood</name>' as xml)

A ampersand literal dentro de una etiqueta XML no está permitido por la norma XML, y un documento de tal fallará para analizar por cualquier analizador XML.

será codificada XMLSerializer() Un HTML salida el símbolo de unión.

El siguiente código:

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());
        }
    }
}

salida voluntad lo siguiente:

<?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>

, con una &amp; en lugar de &.

Otros consejos

No es XML válido. Uso &amp;:

select cast('<name>Spolsky &amp; Atwood</name>' as xml)

Se necesitaría a XML escapar el texto, también.

Así que vamos a dar marcha atrás y asumir que estamos construyendo esa cadena como:

SELECT '<name>' + MyColumn + '</name>' FROM MyTable

te gustaría hacer algo más como:

SELECT '<name>' + REPLACE( MyColumn, '&', '&amp;' ) + '</name>' FROM MyTable

Por supuesto, es probable debe atender a las otras entidades así:

SELECT '<name>' + REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( MyColumn, '&', '&amp;' ), '''', '&apos;' ), '"', '&quot;' ), '<', '&lt;' ), '>', '&gt;' ) + '</name>' FROM MyTable

Al trabajar con XML en SQL que está mucho más seguro usando funciones incorporadas en lugar de convertir de forma manual.

El siguiente código va a construir una variable XML SQL adecuado que se parece a su salida deseada en base a una cadena de texto:

DECLARE @ExampleString nvarchar(40)
    , @ExampleXml xml

SELECT  @ExampleString = N'Spolsky & Atwood'

SELECT  @ExampleXml =
    (
        SELECT  'Spolsky & Atwood' AS 'name'
        FOR XML PATH (''), TYPE
    )

SELECT  @ExampleString , @ExampleXml

Como Juan y el estado Quassnoi, & por sí mismo no es válido. Esto es debido a que el carácter y comercial es el comienzo de una entidad de caracteres - se usa para especificar caracteres que no se pueden representar literalmente. Hay dos tipos de personas -. Uno especifica el personaje por su nombre (por ejemplo, &amp; o &quot;), y uno, se especifica el carácter por su código (creo que es la posición del código dentro del conjunto de caracteres Unicode, pero no está seguro, por ejemplo, &#34; debe representar un doble cita).

Por lo tanto, para incluir un & literal en un documento HTML, se debe especificar que es la entidad: &amp;. Otros más comunes que pueden surgir son &lt; para <, &gt; para > y &quot; para ".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top