2015-11-05 64 views
1

我有一個字符串與XML片段,我想給它注入到編碼流:XML編碼:XML注入到輸出

package main 

import (
    "encoding/xml" 
    "os" 
) 

func main() { 
    myxml := `<mytag>foo</mytag>` 
    enc := xml.NewEncoder(os.Stdout) 
    root := xml.StartElement{Name: xml.Name{Local: "root"}} 
    enc.EncodeToken(root) 
    enc.EncodeToken(xml.CharData(myxml)) 
    enc.EncodeToken(root.End()) 
    enc.Flush() 
} 

我得到<root>&lt;mytag&gt;foo&lt;/mytag&gt;</root>但我想有<root><mytag>foo</mytag></root>

有沒有什麼辦法可以使用enc.EncodeToken()或類似的東西來做到這一點?

+0

直接寫入Writer有什麼問題,即繞過編碼器:'os.Stdout.Write([] byte(myxml))'? – Volker

+0

這就是我所要做的 - 只有確保在直接寫入底層寫入器之前先清空編碼器。 – hobbs

+0

我沒有想到明顯的解決方案。謝謝! – topskip

回答

1

插入原始XML的唯一方法是直接將它寫入流,在這種情況下os.Stdout。

myxml := `<mytag>foo</mytag>` 
enc := xml.NewEncoder(os.Stdout) 
root := xml.StartElement{Name: xml.Name{Local: "root"}} 
enc.EncodeToken(root) 
enc.Flush() 
os.Stdout.WriteString(myxml) 
enc.EncodeToken(root.End()) 
enc.Flush() 

這是essentialy如果您使用innerxml結構的標籤會發生什麼,但只能通過一個結構來完成,並且會給你多一個組代表圍繞你的原始XML的結構標籤。

+0

它看起來不像»One True Way(TM)«,但它工作正常,它解決了我的問題。謝謝! – topskip