XML中的结构数组没有包装节点?

我有一个客户拥有 XML,他们似乎想要一个库存数组,但是每个项目一个接一个地列出,没有包装节点。


这是我正在做的一个示例,但每个项目都有一个包装节点。有没有办法让它们在“root”下一个接一个地列出?


测试代码:


package main


import (

    "encoding/xml"

    "fmt"

    "os"

    "strconv"

)


func main() {

    type InventoryItem struct {

        XMLName  xml.Name

        ItemName string `xml:"Name"`

        ItemDescription string `xml:"Description"`

    }


    type XMLEnvelop struct {

        XMLName   xml.Name        `xml:"root"`

        Inventory []InventoryItem `xml:"item"`

        Records   int             `xml:"records"`

    }


    var items []InventoryItem


    for i := 1; i < 6; i++ {

        items = append(items, InventoryItem{XMLName: xml.Name{Local: "item" + strconv.Itoa(i)}, ItemName: "Test " + strconv.Itoa(i), ItemDescription: "Description " + strconv.Itoa(i)})

    }


    v := &XMLEnvelop{Records: 1, Inventory: items}


    output, err := xml.MarshalIndent(v, "", "    ")

    if err != nil {

        fmt.Printf("error: %v\n", err)

    }


    // Write the output to check

    os.Stdout.Write(output)


    //Here is where I would make the request


}

测试输出:


<root>

    <item1>

        <Name>Test 1</Name>

        <Description>Description 1</Description>

    </item1>

    <item2>

        <Name>Test 2</Name>

        <Description>Description 2</Description>

    </item2>

    <item3>

        <Name>Test 3</Name>

        <Description>Description 3</Description>

    </item3>

    <item4>

        <Name>Test 4</Name>

        <Description>Description 4</Description>

    </item4>

    <item5>

        <Name>Test 5</Name>

        <Description>Description 5</Description>

    </item5>

    <records>1</records>

</root>

去游乐场: https: //play.golang.org/p/3DRUABFEQvC


这是他们似乎正在寻找的输出......无论出于何种原因。


<root>

    <Name>Test 1</Name>

    <Description>Description 1</Description>

    <Name>Test 2</Name>

    <Description>Description 2</Description>

    <Name>Test 3</Name>

    <Description>Description 3</Description>

    <Name>Test 4</Name>

    <Description>Description 4</Description>

    <Name>Test 5</Name>

    <Description>Description 5</Description>

    <records>1</records>

</root>


慕婉清6462132
浏览 74回答 1
1回答

MM们

您可以实现自定义封送拆收器。type InventoryItem struct {&nbsp; &nbsp; XMLName&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xml.Name&nbsp; &nbsp; ItemName&nbsp; &nbsp; &nbsp; &nbsp; string `xml:"Name"`&nbsp; &nbsp; ItemDescription string `xml:"Description"`}func (i InventoryItem) MarshalXML(e *xml.Encoder, start xml.StartElement) error {&nbsp; &nbsp; // Ignore the passed in `start` argument, it represents the&nbsp; &nbsp; // parent InventoryItem element of the Name and Description.&nbsp; &nbsp; // Declare types to represent the elements you want to encode,&nbsp; &nbsp; // initialize them to the item's field values and encode them.&nbsp; &nbsp; //&nbsp; &nbsp; // Use the ",chardata" option to tell the encoder to encode the&nbsp; &nbsp; // field's value directly rather than as a child element.&nbsp;&nbsp; &nbsp; type Name struct {&nbsp; &nbsp; &nbsp; &nbsp; Value string `xml:",chardata"`&nbsp; &nbsp; }&nbsp; &nbsp; if err := e.Encode(Name{i.ItemName}); err != nil {&nbsp; &nbsp; &nbsp; &nbsp; return err&nbsp; &nbsp; }&nbsp; &nbsp; type Description struct {&nbsp; &nbsp; &nbsp; &nbsp; Value string `xml:",chardata"`&nbsp; &nbsp; }&nbsp; &nbsp; return e.Encode(Description{i.ItemDescription})}https://play.golang.org/p/D4ZVr2sWZju
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go