2015-09-21 57 views
6

下面是XML結構:XML解組不尊重根元素命名空間前綴定義

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 xmlns:test="http://test.com/testns"> 
      <test:sub> 
       <title>this is title</title> 
      </test:sub> 
</root> 

它得到與下面定義的結構解組:

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

根元素空間前綴定義在元帥和子元素之後被刪除nt使用url命名空間而不是前綴。這是code

是否有任何方式,元帥/ unmarshal不會改變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結構並添加test:前綴在輸入root XML元素。

+0

雖然我不確定它是否正確處理'title'元素。當命名空間用'xmlns:test'聲明並且'title'元素名稱沒有前綴時,我不認爲它應該在名稱空間中。然而,在處理過的版本中,使用原始的'xmlns'聲明,所有的孩子都會自動進入命名空間......正如@RoninDev所提到的那樣,stdlib xml庫對名稱空間並不是很好。 –

相關問題