XML编码:XML注入到输出

问题描述:

我有一个字符串与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

插入原始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