我知道golang xml ,innerxml
标记,它允许获取元素内部内容作为原始xml。但是我需要将整个元素(打开标签,内部内容,关闭标签)作为原始数据获取。
这里是我想以这种方式解析的样本。我想获取整个<Useful>
及其所有可能的attribute元素,并避免获取无用的元素。
package main
import (
"encoding/xml"
"fmt"
)
const data = `<Document>
<Useless1>
blah-blah
</Useless1>
<Useless2>
blah-blah
</Useless2>
<Useful someAttr="someVal">
<InnerField1>Inner field 1 value</InnerField1>
<InnerField2>Inner field 2 value</InnerField2>
<InnerField3>Inner field 3 value</InnerField3>
</Useful>
<Useless3>
blah-blah
</Useless3>
</Document>
`
func main() {
doc := Document{}
err := xml.Unmarshal([]byte(data),&doc)
if err != nil {
panic(err)
}
fmt.Println(doc.Useful.Data)
}
type Document struct {
XMLName xml.Name `xml:"Document"`
Useful struct {
Data string `xml:",innerxml"`
} `xml:"Useful"`
}
在操场上的代码的链接在这里: https://goplay.space/#0KDXiRKDwlY
这就是我得到的:
<InnerField1>Inner field 1 value</InnerField1>
<InnerField2>Inner field 2 value</InnerField2>
<InnerField3>Inner field 3 value</InnerField3>
这就是我想要得到的:
<Useful someAttr="someVal">
<InnerField1>Inner field 1 value</InnerField1>
<InnerField2>Inner field 2 value</InnerField2>
<InnerField3>Inner field 3 value</InnerField3>
</Useful>
请注意,我正在使用的实际结构要复杂得多。我不想将整个<Document>
内部内容作为原始xml进行解析,然后尝试手动摆脱无用的元素。 <Useful>
部分各不相同,因此我无法进行硬编码,例如属性会导致它们在一个文档之间可能会有所不同。