Question

J'ai le code XML suivant que j'utilise dans SQL Server et il se casse, pourquoi?

 declare @xml varchar(max)
 declare @hDoc int

 set @xml = '<transaction>
 <item itemId="1" value="Hello World" />
 <item itemId="2" value="Hello &World" />
 <item itemId="3" value="Hello <World" />
 <item itemId="4" value="Hello >World" />
 <item itemId="5" value="Hello ’World" />
 </transaction>'

 exec sp_xml_preparedocument @hDoc OUTPUT, @xml

 select
        itemId
 ,      value
 from
     openxml(@hDoc, '/transaction/item')
    with (
         itemId int,
         value varchar(max)
     ) item
Était-ce utile?

La solution

Les valeurs dans le XML contiennent des caractères non valides. Pour XML en général, vous devez vous échapper du signe inférieur à et de l'esperluette comme ceci: & amp; lt; et & amp;

 declare @xml varchar(max)
 declare @hDoc int

 set @xml = '<transaction>
 <item itemId="1" value="Hello World" />
 <item itemId="2" value="Hello &amp;World" />
 <item itemId="3" value="Hello &lt;World" />
 <item itemId="4" value="Hello >World" />
 </transaction>'

 exec sp_xml_preparedocument @hDoc OUTPUT, @xml

 select
        itemId
 ,      value
 from
     openxml(@hDoc, '/transaction/item')
    with (
         itemId int,
         value varchar(max)
     ) item

Cependant, lors de l’utilisation de openxml, certaines valeurs ne fonctionneront pas, en particulier cette apostrophe frisée. Je ne sais pas quelles valeurs ne sont pas valides, mais je sais que c'est l'une d'entre elles. La solution consiste donc à utiliser le type XML natif dans SQL Server 2005.

 declare @xml xml
 set @xml = '<transaction>
 <item itemId="1" value="Hello World" />
 <item itemId="2" value="Hello &amp;World" />
 <item itemId="3" value="Hello &lt;World" />
 <item itemId="4" value="Hello >World" />
 <item itemId="5" value="Hello ’World" />
 </transaction>'

 select
       item.value('@itemId', 'int')
     , item.value('@value', 'varchar(max)')
 from @xml.nodes('/transaction/item') [transaction](item)

Autres conseils

Si possible, assemblez votre document XML dans l'application. La structure (.Net, Java, ...?) Effectuera le codage approprié pour vous et générera un code XML valide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top