英文:
Create a Golang struct from an XSD
问题
我想从一个XSD(结构XSD)创建一个Golang结构体。
我已经阅读了这篇帖子https://stackoverflow.com/questions/20734450/generate-go-structs-from-xsd,它推荐使用go-xsd,但是我已经下载了go-xsd并安装了xsd-makepkg,但是我无法生成我的结构体。
我在做什么?
xsd-makepkg -basepath="/Users/XSD_Access/" -goinst=false
-xsd-makepkg:它是从go-xsd-pkg中创建的二进制文件
-basepath:包含我要转换为结构体的结构XSD的路径。
-goinst:我没有安装go-buildrun,我认为它不是必需的,所以设置为false。
命令的结果是什么?
一个包含其他文件夹的文件夹($GOPATH/usr/Users/XSD_Access/),这些文件夹包含所有的XML包装器。
- docbook.org
- docs.oasis-open.org
- kbcafe.com
- khronos.org
- schemas.opengis.net
- thearchitect.co.uk
- Users
- www.w3.org
结构XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="Request" type="Request"/>
<xs:complexType name="Request">
<xs:annotation>
<xs:documentation xml:lang="sp"><![CDATA[
Comment xxxxx
]]></xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="idOne" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation xml:lang="sp"><![CDATA[Comment xxxxx
]]></xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="idTwo" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation xml:lang="sp"><![CDATA[Comment xxxxxx
]]></xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
有人可以告诉我我做错了什么或者我错过了哪个步骤,导致我无法从我的结构XSD创建结构体吗?
提前感谢。
英文:
I want to create a Golang struct from an XSD (Structure XSD).
I've read the post https://stackoverflow.com/questions/20734450/generate-go-structs-from-xsd which recommend using go-xsd, but I have downloaded go-xsd and installed xsd-makepkg and I cannot generate my struct.
What I am doing?
xsd-makepkg -basepath="/Users/XSD_Access/" -goinst=false
-xsd-makepkg: it is the binary create from apart go-xsd-pkg
-basepath: Contains the route where I have Structure XSD that I want to transform to struct.
-goinst : I have not installed go-buildrun and I think it is not neccesary , for that reason is ser false
What is the result of the command?
A folder($GOPATH/usr/Users/XSD_Access/) that contains other folders with all followers XML wrappers
- docbook.org
- docs.oasis-open.org
- kbcafe.com
- khronos.org
- schemas.opengis.net
- thearchitect.co.uk
- Users
- www.w3.org
Structure XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="Request" type="Request"/>
<xs:complexType name="Request">
<xs:annotation>
<xs:documentation xml:lang="sp"><![CDATA[
Comment xxxxx
]]></xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="idOne" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation xml:lang="sp"><![CDATA[Comment xxxxx
]]></xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="idTwo" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation xml:lang="sp"><![CDATA[Comment xxxxxx
]]></xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
Can anyone tell me what I am doing wrong or what step I missed that it does not let me create a struct from my Structure XSD?
Thanks in advance
答案1
得分: 5
xsd-makepkg期望从某种网络服务器下载xsd文件。
一开始我也对此感到困惑,因为文档中提到了从本地文件构建,但这只适用于已经下载的文件。
-basepath=""
确定这些文件将被下载到的位置,以及生成的.go文件将被放置的位置。
你要找的是-uri=""
参数。-uri=""
确定要下载和处理的哪些文件。该参数接受一个以空格分隔的URI列表,http://
是可选的。
使其与本地文件一起工作的一种快速而简单的方法是从本地Apache实例中提供文件,然后将程序指向localhost。当然,这是假设你恰好有一个正在运行的Web服务器。
例如:
mv *.xsd /var/www/html
cd /var/www/html
for xsd in *; do xsd-makepkg -uri="127.0.0.1/$xsd"; done
英文:
xsd-makepkg expects to download the xsd files from a network server of some sort.
I was confused by this at first as well, since the documentation mentioned building from local files, but that only works if the files specified are already downloaded.
-basepath=""
determines where these files will be downloaded to, and where the generated .go files will be put
what you're looking for is the -uri=""
argument. -uri=""
determines which files are to be downloaded and processed. The argument takes a whitespace separated list of uris, and http://
is optional.
A quick and dirty way to make it work with a local file is to serve the file from a local Apache instance, then point the program to localhost. That is of course assuming that you happen to have a web server running.
for example:
mv *.xsd /var/www/html
cd /var/www/html
for xsd in *; do xsd-makepkg -uri="127.0.0.1/$xsd"; done
答案2
得分: 5
我找到了这个命令行选项:
-local=true:本地副本 -- 仅在本地文件不存在时下载
以下语句在 xsd-schema 文件夹中使用 mydomain.xsd 成功运行。
xsd-makepkg -local=true -uri="mydomain.xsd" -basepath="github.com/my_name/xsd-schema"
参考链接:https://github.com/metaleap/go-xsd#command-line-flags-for-go-xsdxsd-makepkg-tool
英文:
I found this command line option:
-local=true :Local copy -- only downloads if file does not exist locally
The below statement worked with mydomain.xsd in the xsd-schema folder.
xsd-makepkg -local=true -uri="mydomain.xsd" -basepath="github.com/my_name/xsd-schema"
reference: https://github.com/metaleap/go-xsd#command-line-flags-for-go-xsdxsd-makepkg-tool
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论