Skip to content

mxjvsxmlquery

MIT 2 2 622
58.1 thousand (month) Feb 09 2017 per(1 year, 3 months ago)
441 2 17 MIT
Feb 08 2019 58.1 thousand (month) v1.4.2(20 days ago)

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"
}

Alternatives / Similar


Was this page helpful?