我正在尝试解析 xml 内容以及这样的 XML 元素的所有属性type Node struct { XMLName xml.Name Attributes []xml.Attr `xml:",attr"` BodyElements string `xml:",innerxml"` Nodes []Node `xml:",any"`}var xmldata = []byte("<div><div data-id=\"images/6C7161080\" data-imagesize=\"medium\" data-alignment=\"none\"></div></div>")func walk(nodes []Node, f func(Node) bool) { for _, n := range nodes { if f(n) { walk(n.Nodes, f) } }}func main() { buf := bytes.NewBuffer(xmldata) dec := xml.NewDecoder(buf) var n Node err := dec.Decode(&n) if err != nil { panic(err) } walk([]Node{n}, func(n Node) bool { if n.XMLName.Local == "p" { fmt.Println(string(n.BodyElements)) } else if n.XMLName.Local == "div"{ fmt.Println(string(n.BodyElements)) fmt.Println(len(n.Attributes)) } return true })}但是 len(n.Attributes) 的值始终为 0。我该怎么做才能获取给定元素中的所有属性。注意:属性名称不是恒定的,因为有时元素可以是“div”标签或“img”标签或其他东西。所以我不能使用属性名称作为DataId string `xml:"data-id,attr"`
1 回答
![?](http://img1.sycdn.imooc.com/545850a00001fdd002200220-100-100.jpg)
Helenr
TA贡献1780条经验 获得超4个赞
根本的问题是,将 XML 解组到您的文件中struct Node
是行不通的。您BodyElements
捕获了根节点的全部内容,并且没有任何内容被解组到您的Nodes
. (顺便说一句:添加一个简单的 fmt.Printf 会揭示这一点。)
为什么要尝试编写自己的 XML 解组/解析代码?你会失败。只需使用解码器和Token
方法手动解析您的 XML,一个接一个的标记,手动填充您的树。并且:如果您的 XML 实际上是 HTML,您可能想用包 html 解析它。
- 1 回答
- 0 关注
- 286 浏览
添加回答
举报
0/150
提交
取消