如何在go中将2个xml标记解析为1个结构?
我调用了2个标记,但我必须解析它们相同的结构。两者都有相同的东西,但在不同的标记中,我必须将它们混合到另一个xml中如何在go中将2个xml标记解析为1个结构?,xml,go,encoding,Xml,Go,Encoding,我调用了2个标记,但我必须解析它们相同的结构。两者都有相同的东西,但在不同的标记中,我必须将它们混合到另一个xml中 <Products> <Product_name>TOY</Product_name> <\Products> <Goods> <Goods_name>TOY</Goods_name> <\Goods> 但我不会工作。你能帮我吗?没有更多的细节,很难给出一个好的答案 我不知
<Products>
<Product_name>TOY</Product_name>
<\Products>
<Goods>
<Goods_name>TOY</Goods_name>
<\Goods>
但我不会工作。你能帮我吗?没有更多的细节,很难给出一个好的答案 我不知道xml的大小,也不知道是否只需要解析一些标记或整个文件 我正在处理一个非常大的xml文件,为了限制内存消耗,我使用这个避免检查结束标记是否与开始标记匹配。 如果您需要以一种非常特殊的方式处理xml,那么您可以解析它并只获取所需的数据 这里是一个创建产品切片的示例 你可以在这里找到它:
主程序包
进口(
“编码/xml”
“fmt”
“字符串”
)
类型产品结构{
名称字符串
其他整数
}
func main(){
str:=strings.NewReader(“\nTOYP\n\n\n\nTOYG\n”)
fmt.Println(str)
var产品[]产品
解码器:=xml.NewDecoder(str)
为了{
t、 错误:=解码器。RawToken()
如果错误!=零{
打破
}
非弹性串
开关se:=t(类型){
case xml.StartElement:
inElement=strings.TrimSpace(se.Name.Local)
开关线{
案例“产品名称”:
失败
案例“货物名称”:
t、 错误:=解码器。RawToken()
如果错误!=零{
fmt.Printf(“错误%v\n”,错误)
打破
}
开关元件:=t(类型){
case xml.CharData:
products=append(products,Product{name:string(element)})
违约:
fmt.Println(“不应发生”)
持续
}
}
}
}
fmt.Println(产品)
}
输出:
&{<Products>
<Product_name>TOYP</Product_name>
</Products>
<Goods>
<Goods_name>TOYG</Goods_name>
</Goods> 0 -1}
[{TOYP 0} {TOYG 0}]
&{
托伊普
玩具
0 -1}
[{TOYP 0}{TOYG 0}]
做一个标记并包含XML code.heu,以防这是
而不是
package main
import (
"encoding/xml"
"fmt"
"strings"
)
type Product struct {
name string
other int
}
func main() {
str := strings.NewReader("<Products>\n<Product_name>TOYP</Product_name>\n</Products>\n\n<Goods>\n<Goods_name>TOYG</Goods_name>\n</Goods>")
fmt.Println(str)
var products []Product
decoder := xml.NewDecoder(str)
for {
t, err := decoder.RawToken()
if err != nil {
break
}
var inElement string
switch se := t.(type) {
case xml.StartElement:
inElement = strings.TrimSpace(se.Name.Local)
switch inElement {
case "Product_name":
fallthrough
case "Goods_name":
t, err := decoder.RawToken()
if err != nil {
fmt.Printf("Err %v\n", err)
break
}
switch element := t.(type) {
case xml.CharData:
products = append(products, Product{name: string(element)})
default:
fmt.Println("should not happen")
continue
}
}
}
}
fmt.Println(products)
}
&{<Products>
<Product_name>TOYP</Product_name>
</Products>
<Goods>
<Goods_name>TOYG</Goods_name>
</Goods> 0 -1}
[{TOYP 0} {TOYG 0}]