英文:
Validate XML document against XML schema in Go
问题
在Go语言中,你可以使用encoding/xml
包来读取和验证XML文档。下面是一个简单的示例代码,演示了如何读取XML文档并根据XML模式进行验证:
package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
"os"
)
func main() {
// 读取XML文件
xmlFile, err := os.Open("example.xml")
if err != nil {
fmt.Println("无法打开XML文件:", err)
return
}
defer xmlFile.Close()
// 读取XML内容
byteValue, err := ioutil.ReadAll(xmlFile)
if err != nil {
fmt.Println("无法读取XML内容:", err)
return
}
// 定义XML结构
type Person struct {
Name string `xml:"name"`
Age int `xml:"age"`
Email string `xml:"email"`
}
// 解析XML
var person Person
err = xml.Unmarshal(byteValue, &person)
if err != nil {
fmt.Println("无法解析XML:", err)
return
}
// 打印解析结果
fmt.Println("姓名:", person.Name)
fmt.Println("年龄:", person.Age)
fmt.Println("邮箱:", person.Email)
// 验证XML
schemaFile, err := os.Open("schema.xsd")
if err != nil {
fmt.Println("无法打开XML模式文件:", err)
return
}
defer schemaFile.Close()
schemaBytes, err := ioutil.ReadAll(schemaFile)
if err != nil {
fmt.Println("无法读取XML模式内容:", err)
return
}
schema := string(schemaBytes)
err = xml.UnmarshalValidate(byteValue, []byte(schema))
if err != nil {
fmt.Println("XML验证失败:", err)
return
}
fmt.Println("XML验证通过!")
}
请注意,上述示例中的example.xml
是要读取的XML文件,schema.xsd
是XML模式文件。你需要将这两个文件替换为你自己的文件路径。
希望这可以帮助到你!如果你有任何其他问题,请随时问我。
英文:
How do you read an XML document in Go and validate it against an XML schema?
答案1
得分: 1
一个好的起点是使用项目metaleap/go-xsd
,它可以为指定的XSD模式URI生成Go的"XML包装器"包源代码。
每个生成的包装器包都包含了所需的类型结构,可以轻松地使用
xml.Unmarshal()
来解组基于该XSD的XML文档。
这意味着,如果你不能使用这些生成的类来解组一个XML文档(基于特定的XML模式),那么该XML文档就不是一个有效的文档(对于该XML模式)。
英文:
A start vouwld be to use the project metaleap/go-xsd
, which can generate Go "XML wrapper" package sources for specified XSD schema URIs.
> Each generated wrapper package contains the type structures required to easily xml.Unmarshal()
an XML document based on that XSD.
It means that if you are not able to unmarshall an xml document using those generated classes (based on a specific XML schema), that xml document isn't a valid one (for that XML schema).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论