在xml中的任何级别上解组匹配的节点
我正在尝试解组一个xml并从中提取特定的节点,这些节点可以在几个不同的级别上。 例如,这样的Xml是有效的:在xml中的任何级别上解组匹配的节点,xml,go,Xml,Go,我正在尝试解组一个xml并从中提取特定的节点,这些节点可以在几个不同的级别上。 例如,这样的Xml是有效的: <People> <Person> <FullName>Jerome Anthony</FullName> </Person> <a> <Person>
<People>
<Person>
<FullName>Jerome Anthony</FullName>
</Person>
<a>
<Person>
<FullName>Christina</FullName>
</Person>
</a>
</People>
备注:这是一个简单的字符串解组示例,实际上我也想解组复杂结构。在我看来,人们没有名为FullName的子级。但是,它有一个名为“a”的子级,该子级有一个名为FullName的子级
文档中有一个工作示例: 在我看来,人们似乎没有叫全名的孩子。但是,它有一个名为“a”的子级,该子级有一个名为FullName的子级
文档中有一个工作示例: 你说得对,这就是我面临的问题。如果我指定
xml:“Person>FullName”
,结果将是Jerome Anthony
,而如果我指定xml:“a>Person>FullName”
,结果将是Christina
。我想将两者合并为相同的值。我想做与xpath类似的事情,在xpath中,您可以构建一个表达式,它说“给我任何节点,不管嵌套级别如何,也就是FullName
@buddy123,您可以这样做。您是对的,这就是我面临的问题。如果我指定xml:“Person>FullName”“
,结果将是Jerome Anthony
,而如果我指定xml:“a>Person>FullName”
,结果将是Christina
。我想将两者合并为相同的值。我想做与xpath类似的事情,在xpath中,您可以构建一个表达式,表示“给我任何节点,不管嵌套级别如何,它的名称是FullName
@buddy123,您可以这样做。
type People struct {
Names []string `xml:"FullName"`
}
v := People{Names: []string{}}
err := xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Printf("Names of people: %q", v)