2012-11-16 14 views
16

go xml package पर देखकर मुझे ऐसी संभावना नहीं मिली। Go केवल संरचनाओं के पेड़ को परिभाषित करने की अनुमति देता है, उन्हें एक्सएमएल पेड़ पर मानचित्रित करता है और xml.NewDecoder(myXmlString).Decode(myStruct) का उपयोग करके deserialize।XPath का उपयोग कर एक्सएमएल से मूल्य कैसे प्राप्त करें

भले ही मैं गो संरचनाओं के आवश्यक पेड़ को परिभाषित करता हूं, फिर भी मैं XPath का उपयोग करके उस पेड़ से पूछ नहीं सकता।

सी # में सुविधाजनक फ़ंक्शन SelectSingleNode है जो सी # कक्षाओं में पूरे वृक्ष संरचना को डुप्लिकेट किए बिना XPath निर्दिष्ट करके एक्सएमएल पेड़ से मूल्य का चयन करने की अनुमति देता है।

क्या गो में इसी तरह की संभावना है? यदि नहीं, तो इसे लागू करने का सबसे आसान तरीका क्या है (संभावित रूप से एक्सएमएल पैकेज का पुन: उपयोग करना)?

उत्तर

3

भी xpath नहीं है, हालांकि, आप मूल्यों एक्सएमएल से बाहर देशी go xml encoder पैकेज के साथ पढ़ सकते हैं। आप xml.Unmarshal() फ़ंक्शन का उपयोग करेंगे। Here एक गो प्ले उदाहरण है।

package main 

import "fmt" 
import "encoding/xml" 

func main() { 
    type People struct { 
     Names []string `xml:"Person>FullName"` 
    } 

    data := ` 
     <People> 
      <Person> 
       <FullName>Jerome Anthony</FullName> 
      </Person> 
      <Person> 
       <FullName>Christina</FullName> 
      </Person> 
     </People> 
    ` 

    v := People{Names: []string{}} 
    err := xml.Unmarshal([]byte(data), &v) 
    if err != nil { 
     fmt.Printf("error: %v", err) 
     return 
    } 
    fmt.Printf("Names of people: %q", v) 
} 
11

गो के मानक पैकेज में कोई xpath पार्सिंग नहीं है, इसलिए आपको किसी तृतीय पक्ष पैकेज का उपयोग करने का सहारा लेना होगा।

फिर एक मैं जानता हूँ कि की Gokogiri
पैकेज libxml2 का उपयोग कर सीजीओ

सबपैकेज आप आयात करना चाहते github.com/moovweb/gokogiri/xpath

9

वहाँ भी xmlpath पैकेज है पर आधारित है।

नमूना उपयोग:

path := xmlpath.MustCompile("/library/book/isbn") 
root, err := xmlpath.Parse(file) 
if err != nil { 
    log.Fatal(err) 
} 
if value, ok := path.String(root); ok { 
    fmt.Println("Found:", value) 
} 
+0

क्या आप जानते हैं कि इसका उपयोग http.Get आउटपुट के साथ कैसे किया जा सकता है? – Mahdi

1

xquery कर सकते हैं XPath, इसकी एक xpath कार्यान्वयन का उपयोग XML दस्तावेज़ों से डेटा निकालने की सुविधा देता है।

package main 

import (
    "fmt" 
    "strings" 
    "github.com/antchfx/xquery/xml" 
) 

func main() { 
    htmlstr := `<?xml version="1.0" ?> 
    <html> 
    <head> 
    <title>this is a title</title> 
    </head> 
    <body>Hello,World</body> 
    </html>` 
    root, err := xmlquery.Parse(strings.NewReader(htmlstr)) 
    if err != nil { 
     panic(err) 
    } 
    title := xmlquery.FindOne(root, "//title") 
    fmt.Println(title.InnerText()) 
} 
संबंधित मुद्दे