मेरे पास स्ट्रिंग प्रारूप में एक एक्सएमएल है, क्या कोई एक्सएमएल स्ट्रिंग को उचित एक्सएमएल प्रारूप में बदलने में मेरी मदद कर सकता है?

package main

import "fmt"

func main() {

    message := `<?xml proflie ><test> value '123'</test>`
    fmt.Printf("%s", message)
}
-1
Quick learner 1 अप्रैल 2020, 07:36

1 उत्तर

सबसे बढ़िया उत्तर

encoding/xml पैकेज का उपयोग EscapeText फ़ंक्शन के साथ करें:

package main

import (
    "bytes"
    "encoding/xml"
    "fmt"
)

func Xml(in string) string {
    var b bytes.Buffer
    xml.EscapeText(&b, []byte(in))
    return b.String()
}

func main() {
    fmt.Println(`<?xml profile><test>` + Xml(`test '123'`) + `</test>`)
}

यह आउटपुट देगा: test &#39;123&#39;

गो के पास encoding/xml पैकेज में एक्सएमएल के लिए उत्कृष्ट समर्थन है, और आपके आउटपुट का उत्पादन करने के अन्य तरीके हैं जिनमें मैन्युअल रूप से आपके एक्सएमएल का निर्माण शामिल नहीं है।

यह संस्करण <test> तत्व में रैपिंग करता है, और आपको interface{} को EncodeElement विधि में पास करने की अनुमति भी देता है, इसलिए आप स्ट्रिंग्स तक सीमित नहीं हैं:

package main

import (
    "encoding/xml"
    "os"
)

func main() {
    s := `test '123'`
    test := xml.StartElement{Name:xml.Name{Local:`test`}}
    xml.NewEncoder(os.Stdout).EncodeElement(s, test)
}

अंत में, और शायद सबसे अच्छा, यह संस्करण एक stuct और .Encode विधि का उपयोग करता है:

package main

import (
    "encoding/xml"
    "os"
)

type Test struct {
    XMLName xml.Name `xml:"test"`
    Content string `xml:",chardata"`
}
func main() {
    s := Test{Content:`test '123'`}
    xml.NewEncoder(os.Stdout).Encode(&s)
}

अब आप संरचना का विस्तार कर सकते हैं, लेकिन सबसे अच्छी बात यह है कि आप आने वाले XML से डेटा निकालने के लिए Unmarshal या Decode इस प्रकार का भी कर सकते हैं:

package main

import (
    "bytes"
    "encoding/xml"
    "fmt"
)

type Test struct {
    XMLName xml.Name `xml:"test"`
    Content string `xml:",chardata"`
}

func main() {
    s := Test{Content:`test '123'`}
    var buf bytes.Buffer
    xml.NewEncoder(&buf).Encode(&s)
    fmt.Println("Encoded =", buf.String())

    var read Test
    xml.NewDecoder(bytes.NewReader(buf.Bytes())).Decode(&read)
    fmt.Println("Content =", read.Content)
}

Xml पैकेज द्वारा समर्थित टैग के पूर्ण विवरण के लिए xml.Marshal पर दस्तावेज़ देखें: https://golang.org/pkg/encoding/xml/#Marshal

2
craigmj 1 अप्रैल 2020, 05:23