Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
golang中的变量xml标记_Xml_Go - Fatal编程技术网

golang中的变量xml标记

golang中的变量xml标记,xml,go,Xml,Go,我正试图通过我的go程序与SOAP服务通信,但我在使用时遇到了困难 我必须发送的大多数请求的格式如下: <s:Envelope xmlns="namespace1"> <s:Body> <FunctionName xmlns=“namespace2”/> </s:Body> </s:Envelope> 我觉得我必须为我想发出的每个请求创建一个类型,因为FunctionNamechanges…'这是我目前使用的代码

我正试图通过我的go程序与SOAP服务通信,但我在使用时遇到了困难

我必须发送的大多数请求的格式如下:

<s:Envelope xmlns="namespace1">
 <s:Body>
      <FunctionName xmlns=“namespace2”/>
 </s:Body>
</s:Envelope>

我觉得我必须为我想发出的每个请求创建一个类型,因为
FunctionName
changes…'这是我目前使用的代码

如果我可以有一个属性为
FunctionName
的单一类型就好了,但我就是不知道如何。。。为了更清楚,我想在
xml:s:Body>FunctionName“
中放置一个变量,而不是
FunctionName

非常感谢你的帮助

您可以使用一个字段来指定要在XML输出中使用的标记名。请注意,使用
xml.Name
还可以指定名称空间,因此您甚至不再需要仅用于设置名称空间属性的
Command.Field

这是您修改过的代码:

type Command struct {
    XMLName xml.Name
}

type XMLEnvelop struct {
    XMLName      xml.Name `xml:"s:Envelope"`
    Xmlns        string   `xml:"xmlns:s,attr"`
    FunctionName Command  `xml:"s:Body>FunctionName"`
}

v := &XMLEnvelop{Xmlns: "namespace1",
    FunctionName: Command{xml.Name{"namespace2", "MyFuncName"}}}

output, err := xml.MarshalIndent(v, "", "    ")
if err != nil {
    fmt.Printf("error: %v\n", err)
}

// Write the output to check
os.Stdout.Write(output)
输出(在上尝试):


<s:Envelope xmlns:s="namespace1">
    <s:Body>
        <MyFuncName xmlns="namespace2"></MyFuncName>
    </s:Body>
</s:Envelope>