在Go中验证XML文档与XML模式。

huangapple go评论95阅读模式
英文:

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).

huangapple
  • 本文由 发表于 2014年12月9日 12:27:08
  • 转载请务必保留本文链接:https://go.coder-hub.com/27371435.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定