2015-09-21 5 views
6

ルート要素の名前空間接頭辞の定義を尊重していないXML構造です:XMLの整列化は、ここで

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

これは、以下に定義する構造体とアンマーシャルます:

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

これが戻って整列化する内容です。

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

marshalとsub elemeの後にルート名前空間接頭辞の定義が削除されます。 ntは接頭辞の代わりにURL名前空間を使用しています。ここにはcode

マーシャル/アンマーシャルはXML構造を変更しない方法はありますか?ありがとう!

+1

xml名前空間が正しく動作しないようです。https://github.com/golang/go/issues/9519 https://github.com/golang/go/issues/11841 – RoninDev

+2

もしそうなら、それはそれが受け入れられるように、おそらく最も良い答えに作られています。 – ijt

答えて

0

論理構造が変更されているようには見えません。元の入力では、root要素は、http://test.com/testnsという名前空間のプレフィックスtestを宣言していますが、実際にはその名前空間にあると宣言しません。 https://play.golang.org/p/NqNyIyMB4IP

私はRoot構造体まで名前空間をぶつけて入力でroot XML要素にtest:接頭辞を追加しました:

はここで、それはあなたが望むどのように見えるかを行いその代替バージョンです。

+0

'title'要素を正しく処理しているかどうかはわかりませんが。ネームスペースが 'xmlns:test'で宣言され、' title'要素名にプレフィックスがない場合、私はネームスペースにあると考えられません。しかし、処理されたバージョンでは、未処理の 'xmlns'宣言で、すべての子が自動的にネームスペースに入ります。@RoninDevが述べたように、stdlib xmlライブラリはネームスペースであまり大きくありません。 –

関連する問題