mxjvsxmlquery
mxj is a Go library for working with JSON and XML data. It allows you to convert between JSON and XML, merge JSON and XML documents, and extract values from JSON and XML using a simple and intuitive API.
One of the main features of mxj is its ability to work with JSON and XML data in a struct-like manner, allowing you to access values using dot notation.
xmlquery is a Go library that allows you to parse and extract data from XML documents using XPath expressions. It provides a simple and intuitive API for traversing and querying the XML tree structure, and it is built on top of the popular Goquery library.
Note: for parsing HTML sister library htmlquery should be used instead.
Example Use
package main
import (
"fmt"
"github.com/clbanning/mxj"
)
func main() {
// Parse the JSON string
jsonData := []byte(`
{
"name": "John Doe",
"age": 30,
"address": {
"street": "Main St",
"city": "Anytown",
"state": "CA",
"zip": "12345"
},
"phones": [
"555-555-5555",
"555-555-5556"
]
}
`)
mv, err := mxj.NewMapJson(jsonData)
if err != nil {
fmt.Println("Error:", err)
return
}
// Extract the name
name, _ := mv.ValueForPath("name")
fmt.Println("name:", name) // "John Doe"
// Extract the city
city, _ := mv.ValueForPath("address.city")
fmt.Println("city:", city) // "Anytown"
// Extract all phone numbers
phones, _ := mv.ValuesForPath("phones")
for _, phone := range phones {
fmt.Println("phone:", phone)
}
// "555-555-5555"
// "555-555-5556"
}
package main
import (
"fmt"
"log"
"github.com/antchfx/xmlquery"
)
func main() {
// Parse the XML string
doc, err := xmlquery.Parse([]byte(`
<root>
<person>
<name>John Doe</name>
<age>30</age>
<address>
<street>Main St</street>
<city>Anytown</city>
<state>CA</state>
<zip>12345</zip>
</address>
<phone>555-555-5555</phone>
<phone>555-555-5556</phone>
</person>
</root>
`))
if err != nil {
log.Fatal(err)
}
// Extract the name
name := xmlquery.FindOne(doc, "//person/name")
fmt.Println(name.InnerText()) // "John Doe"
// Extract the city
city := xmlquery.FindOne(doc, "//person/address/city")
fmt.Println(city.InnerText()) // "Anytown"
// Extract all phone numbers
phones := xmlquery.Find(doc, "//person/phone")
for _, phone := range phones {
fmt.Println(phone.InnerText())
}
// "555-555-5555"
// "555-555-5556"
}