2015-09-21 13 views
6

Ecco la struttura XML:unmarshal XML non rispetta l'elemento principale definizione namespace prefix

<root xmlns:test="http://test.com/testns"> 
      <test:sub> 
       <title>this is title</title> 
      </test:sub> 
</root> 

Si ottiene deserializzati con le struct definito di seguito:

type Root struct { 
    XMLName xml.Name `xml:"root"` 
    Sub *Sub 
} 

type Sub struct { 
    XMLName  xml.Name `xml:"http://test.com/testns sub"` 
    Title   string `xml:"title"` 
} 

Questo è ciò che viene marshalling indietro:

<root> 
    <sub xmlns="http://test.com/testns"> 
     <title>this is title</title> 
    </sub> 
</root> 

La definizione del prefisso dello spazio dei nomi di root viene rimossa dopo il marshall e il sottoeleme nt sta usando il namespace url invece del prefisso. Ecco lo code

C'è un modo che marshal/unmarshal non cambierà la struttura xml? Grazie!

+1

Sembra che gli spazi dei nomi xml non funzionino correttamente per ora https://github.com/golang/go/issues/9519 https://github.com/golang/go/issues/11841 – RoninDev

+2

Se è così allora quello è un risposta ed è probabilmente meglio trasformato in una risposta in modo che possa essere accettata. – ijt

risposta

0

Non sembra che abbia modificato la struttura logica. Nell'input originale, l'elemento root dichiara un prefisso test per lo spazio dei nomi http://test.com/testns ma in realtà non si dichiara che si trova in tale spazio dei nomi.

Ecco una versione alternativa che fa quello che appare come si desidera: https://play.golang.org/p/NqNyIyMB4IP

ho urtato lo spazio dei nomi fino al Root struct e aggiunto il prefisso test: all'elemento root XML in ingresso.

+0

Anche se non sono sicuro che gestisca correttamente l'elemento 'title'. Quando lo spazio dei nomi è dichiarato con 'xmlns: test' e il nome dell'elemento' title' non ha un prefisso, non credo che dovrebbe essere nel namespace. Tuttavia, nella versione elaborata, con la dichiarazione raw 'xmlns', tutti i bambini sono automaticamente nello spazio dei nomi ... Come menzionato @RoninDev, le librerie xml stdlib non sono così grandi con gli spazi dei nomi. –

Problemi correlati