V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
luxurioust
V2EX  ›  Go 编程语言

xgen - XSD 模式语言解析引擎与多语言代码生成器

  •  
  •   luxurioust ·
    xuri · 2020-03-25 16:41:40 +08:00 · 1573 次点击
    这是一个创建于 1705 天前的主题,其中的信息可能已经有所发展或是发生改变。

    分享一个 XSD 模式语言解析引擎与多语言代码生成器,希望能够帮助到有需要的朋友。

    github.com/xuri/xgen

    xgen 是 Go 语言编写的 XSD (XML Schema Definition) 工具基础库,其命令行工具的目标是将 XML 模式定义文件编译为包括 Go/C/Java/Rust/TypeScript 在内的多语言类型或类声明代码。

    GitHub 开源: github.com/xuri/xgen

    安装命令行工具:

    xgen [<flag> ...] <XSD file or directory> ...
       -i <path> Input file path or directory for the XML schema definition
       -o <path> Output file path or directory for the generated code
       -p        Specify the package name
       -l        Specify the language of generated code (Go/C/Java/Rust/TypeScript)
       -h        Output this help and exit
       -v        Output version and exit
    

    下面的命令将遍历 xsd 目录中的 XML 模式定义文件,并在 output 目录中生成 Go 语言结构体声明代码:

    xgen -i /path/to/your/xsd -o /path/to/your/output -l Go
    

    XSD 源文件:

    <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.org/">
      <simpleType name="myType1">
        <restriction base="base64Binary">
          <length value="10" />
        </restriction>
      </simpleType>
    
      <complexType name="myType2">
        <simpleContent>
          <extension base="base64Binary">
            <attribute name="length" type="int"/>
          </extension>
        </simpleContent>
      </complexType>
    
      <complexType name="myType3">
        <simpleContent>
          <extension base="date">
            <attribute name="length" type="int"/>
          </extension>
        </simpleContent>
      </complexType>
    
      <complexType name="myType4">
        <sequence>
          <element name="title" type="string"/>
          <element name="blob" type="base64Binary"/>
          <element name="timestamp" type="dateTime"/>
        </sequence>
      </complexType>
    
      <simpleType name="myType5">
        <restriction base="gDay"/>
      </simpleType>
    </schema>
    

    生成 Go 语言代码:

    // Copyright 2020 The xgen Authors. All rights reserved.
    //
    // DO NOT EDIT: generated by xgen XSD generator
    //
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    
    package schema
    
    import (
        "encoding/xml"
        "time"
    )
    
    // MyType1 ...
    type MyType1 []byte
    
    // MyType2 ...
    type MyType2 struct {
        XMLName    xml.Name `xml:"myType2"`
        LengthAttr int      `xml:"length,attr,omitempty"`
    }
    
    // MyType3 ...
    type MyType3 struct {
        XMLName    xml.Name `xml:"myType3"`
        LengthAttr int      `xml:"length,attr,omitempty"`
    }
    
    // MyType4 ...
    type MyType4 struct {
        XMLName   xml.Name  `xml:"myType4"`
        Title     string    `xml:"title"`
        Blob      []byte    `xml:"blob"`
        Timestamp time.Time `xml:"timestamp"`
    }
    
    // MyType5 ...
    type MyType5 time.Time
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5365 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:52 · PVG 11:52 · LAX 19:52 · JFK 22:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.