验证 Golang 中的 XML 数据

validate the xml data in golang

提问人:Harshit Saini 提问时间:9/26/2023 最后编辑:Harshit Saini 更新时间:9/27/2023 访问量:70

问:

我的任务是查找xml数据中是否缺少任何标签。 像这样是xml数据


<people>
    <person>
        <id>1</id>
        <name>John Doe</name>
        <age>30</age>
    </person>
    <person>
        <id>2</id>
        <age></age>
    </person>
    <person>
        <id>3</id>
        <name></name>
    </person>
    <person>
        <id>4</id>
        <address>Chandigarh</address>
    </person>
</people>

姓名和年龄标签是强制性的,它们需要在那里 让我们以 id:2 的人为例,这里缺少姓名标签,因此需要打印:“id:2 缺少姓名标签

package main

import (
    "encoding/xml"
    "fmt"
    "io/ioutil"
    "log"
    "strings"
)

type Person struct {
    ID      int    `xml:"id"`
    Name    string `xml:"name"`
    Age     string `xml:"age"`
    Address string `xml:"address"`
}

func main() {
    xmlData := `
    <people>
        <person>
            <id>1</id>
            <name>John Doe</name>
            <age>30</age>
        </person>
        <person>
            <id>2</id>
            <age></age>
        </person>
        <person>
            <id>3</id>
            <name></name>
        </person>
        <person>
            <id>4</id>
            <address>Chandigarh</address>
        </person>
    </people>
    `

    var people struct {
        Persons []Person `xml:"person"`
    }

    err := xml.Unmarshal([]byte(xmlData), &people)
    if err != nil {
        log.Fatal(err)
    }

    missingTags := make(map[string][]int)

    for _, person := range people.Persons {
        if person.Name == "" {
            missingTags["name"] = append(missingTags["name"], person.ID)
        }
        if person.Age == "" {
            missingTags["age"] = append(missingTags["age"], person.ID)
        }
        if person.Address == "" {
            missingTags["address"] = append(missingTags["address"], person.ID)
        }
    }

    for tagName, ids := range missingTags {
        fmt.Printf("<%s> is missing for id: %v\n", tagName, ids)
    }
}

我试过了这个,但我面临的问题是,如果标签存在但没有像 id:2 中那样的数据,它仍然打印值,年龄标签存在但里面没有数据,但此代码仍然打印它,但我不想打印它,只需要找到丢失的标签

预期输出: ID:2 4 缺少名称 , ID:3 4 的年龄缺失

实际输出: ID: 2 3 4 , ID: 1 2 3 的地址缺失 , ID:2 3 4 缺少名称

XML Go 验证

评论

0赞 exudong 9/26/2023
除了描述之外,您还能添加程序的和吗?expected outputactual output
2赞 Trock 9/26/2023
使用 ,请参阅 playground*string
0赞 kostix 9/26/2023
[1/2] 您没有阅读软件包的文档,这是一种非常错误的编程方法。(当遇到问题时,请始终从文档开始,而不是在 SO 上发布问题。特别是,有关状态的文档:“缺少的元素或空属性值将作为零值取消编组”。Unmarshal
1赞 Trock 9/27/2023
请参阅指针。你需要一个良好的开端,去或去旅游
1赞 Trock 9/27/2023
我对xpath不是很熟悉。正如 kostix 所说,您可以在这里搜索流行的软件包。例如 xmlquery

答: 暂无答案