2015-09-21 7 views
6

ist die XML-Struktur:XML Abstellungs nicht respektiert das Wurzelelement Namespacepräfix Definition

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

Es wird mit den structs entordnet unten definiert:

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"` 
} 

Dies ist, was wird vermarshallten zurück:

Die Root-Namespace-Präfix-Definition wird nach dem Marshal und dem Sub-Element entfernt nt verwendet den URL-Namespace anstelle des Präfix. Hier ist die code

Gibt es eine Möglichkeit, Marshal/Unmarshal nicht ändern die XML-Struktur? Vielen Dank!

+1

Es sieht aus wie XML-Namespaces funktioniert nicht richtig für jetzt https://github.com/golang/go/issues/9519 https://github.com/golang/go/issues/11841 – RoninDev

+2

Wenn ja, das ist ein Antwort und ist wahrscheinlich am besten in eine Antwort gemacht, so dass es akzeptiert werden kann. – ijt

Antwort

0

Es sieht nicht so aus, als hätte es die logische Struktur verändert. In Ihrer ursprünglichen Eingabe deklariert das Element root ein Präfix test für den Namespace , aber es deklariert sich nicht tatsächlich in diesem Namespace.

Hier ist eine alternative Version, das tut, was es sieht aus wie Sie wollen: https://play.golang.org/p/NqNyIyMB4IP

stieß ich den Namespace bis zur Root Struktur und hinzugefügt, um den test: Präfix zu dem root XML-Elemente in der Eingabe.

+0

Ich bin mir nicht sicher, ob es das 'title' Element korrekt behandelt. Wenn der Namespace mit 'xmlns: test' deklariert ist und der' title' Elementname kein Präfix hat, glaube ich nicht, dass er im Namespace enthalten sein soll. In der verarbeiteten Version befinden sich jedoch mit der rohen 'xmlns' -Deklaration automatisch alle untergeordneten Elemente im Namespace ... Wie @RoninDev erwähnt wurde, sind die stdlib-xml-Bibliotheken nicht so gut mit Namespaces. –

Verwandte Themen