none
SQL dotaz do XML

    Dotaz

  • Dobry den,
    
    potřeboval bych vědět jak lze upravit kod :
    
    declare @xml xml;
    
    select @xml = (select * from (select 'Josef' as jmeno, 10 as pocet union all select 'Pavel' , null )a
    
    FOR XML PATH , TYPE, ELEMENTS XSINIL, ROOT('Ham') );
    
    select @xml
    
    kdy výsledek je následující:
    
    <Ham xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <row>
    <jmeno>Josef</jmeno>
    <pocet>10</pocet>
    </row>
    <row>
    <jmeno>Pavel</jmeno>
    <pocet xsi:nil="true" />
    </row>
    </Ham>
    
    Tento XML vysledek nevyhovuje automatu na který chci data posílat, potřebuji odstarnit tyto údaje
    
    v(root) <Ham xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> potřebuji pouze <Ham> bez xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
    
    ve sloupku(pocet) v případě null hodnoty <pocet xsi:nil="true" /> potřebuji pouze <pocet /> bez xsi:nil="true" 
    
    
    
    takže by výsledek vypadal takto
    
     
    
    <Ham>
    <row>
    <jmeno>Josef</jmeno>
    <pocet>10</pocet>
    </row>
    <row>
    <jmeno>Pavel</jmeno>
    <pocet />
    </row>
    </Ham>
    
    Za případnou radu děkuji
    
    JB
    
    pondělí 14. června 2010 12:08

Odpovědi

  • Zatím jsem se dostal jenom k tomu, jak z výsledného XML odstranit atribut xsi:nill:

    SET @xml.modify('
    declare namespace NS="http://www.w3.org/2001/XMLSchema-instance";
     delete(//*/@NS:nil) 
     ')
    Teď ještě zrušit tu deklaraci jmenného prostoru v kořenovém prvku.


    Boris Lehečka (Word, Access, VBA, XML, C#, SQL)
    pondělí 14. června 2010 22:40

Všechny reakce

  • Zatím jsem se dostal jenom k tomu, jak z výsledného XML odstranit atribut xsi:nill:

    SET @xml.modify('
    declare namespace NS="http://www.w3.org/2001/XMLSchema-instance";
     delete(//*/@NS:nil) 
     ')
    Teď ještě zrušit tu deklaraci jmenného prostoru v kořenovém prvku.


    Boris Lehečka (Word, Access, VBA, XML, C#, SQL)
    pondělí 14. června 2010 22:40
  • Zatím dík alespoň za to

    JB

    úterý 15. června 2010 9:08
  • dobrý den, jedna z možností jak to udělat, pokud netrváte na nutnosti použít xml parser, je:

     

    declare @xml xml;
    
    select @xml = (select * from (select 'Josef' as jmeno, 10 as pocet union all select 'Pavel' , null )a
    for xml path , type, elements xsinil, root('Ham') );
    
    select cast(
    		replace(
    			replace(
    				cast (@xml as nvarchar(max))
    				,'xsi:nil="true"','')
    			,' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','')
    		as xml) as newXml

    středa 16. června 2010 16:11