尝试解组XML文件,如:
<Element>
<![CDATA[hello]]>
<image>some_url_here</image>
<![CDATA[world]]>
mixed content here
</Element>
Element标记内有不同类型的数据,我如何才能将此xml分解为一个结构,如:
type XMLElement struct {
XMLName xml.Name `xml:"Element"`
CDatas []string `....`
Image string `...`
PlainText string `...`
}
或此xml的任何其他结构都可以取消编组。
答案 0 :(得分:0)
此解决方案不是很好,因为xmlquery将CDATA
元素设置为TEXT节点类型,但是我认为它很简单,它使用XPath
查询。
package main
import (
"fmt"
"strings"
"github.com/antchfx/xmlquery"
)
func main() {
s := `<?xml version="1.0" encoding="UTF-8"?><Element>
<![CDATA[hello]]>
<image>some_url_here</image>
<![CDATA[world]]>
</Element>
`
doc, err := xmlquery.Parse(strings.NewReader(s))
if err != nil {
panic(err)
}
elem := xmlquery.FindOne(doc, "//Element")
for n := elem.FirstChild; n != nil; n = n.NextSibling {
if n.Data == "image" {
fmt.Printf("image: %s\n", n.InnerText())
} else if n.Type == xmlquery.TextNode {
if len(strings.TrimSpace(n.InnerText())) == 0 {
// skip it because its' empty node
} else {
fmt.Printf("cdata: %s\n", n.InnerText())
}
}
}
// or using query expression
image := xmlquery.FindOne(doc, "//image")
fmt.Printf("image: %s\n", image.InnerText())
}