Documentation
¶
Overview ¶
Package seltabl provides a simple way to parse html tables into structs.
Index ¶
- func New[T any](doc *goquery.Document) ([]T, error)
- func NewFromReader[T any](r io.Reader) ([]T, error)
- func NewFromString[T any](htmlInput string) ([]T, error)
- func NewFromURL[T any](url string) ([]T, error)
- func SetStructField[T any](structPtr *T, fieldName string, cellValue *goquery.Selection, selector string) error
- type Decoder
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func New ¶
New parses a goquery doc into a slice of structs.
The struct given as an argument must have a field with the tag seltabl, a header selector with the tag hSel, and a data selector with the tag dSel.
The selectors responsibilties:
- header selector (hSel): used to find the header row and column for the field in the given struct.
- data selector (dSel): used to find the data column for the field in the given struct.
- cell selector (cSel): used to find the inner text or attribute of the cell.
Example:
var fixture = `
<table>
<tr>
<td>a</td>
<td>b</td>
</tr>
<tr>
<td> 1 </td>
<td>2</td>
</tr>
<tr>
<td>3 </td>
<td> 4</td>
</tr>
<tr>
<td> 5 </td>
<td> 6</td>
</tr>
<tr>
<td>7 </td>
<td> 8</td>
</tr>
</table>
`
type fixtureStruct struct {
A string `json:"a" seltabl:"a" hSel:"tr:nth-child(1) td:nth-child(1)" dSel:"tr td:nth-child(1)" cSel:"$text"`
B string `json:"b" seltabl:"b" hSel:"tr:nth-child(1) td:nth-child(2)" dSel:"tr td:nth-child(2)" cSel:"$text"`
}
func main() {
p, err := seltabl.New[fixtureStruct](fixture)
if err != nil {
panic(err)
}
for _, pp := range p {
fmt.Printf("pp %+v\n", pp)
}
}
func NewFromReader ¶
NewFromReader parses a reader into a slice of structs.
The reader must be a valid html page with a single table.
The passed in generic type must be a struct with valid selectors for the table and data (hSel, dSel, cSel).
func NewFromString ¶
NewFromString parses a string into a slice of structs.
The struct must have a field with the tag seltabl, a header selector with the tag hSel, and a data selector with the tag dSel.
func NewFromURL ¶
NewFromURL parses a URL into a slice of structs.
The URL must be a valid html page with a single table.
The passed in generic type must be a struct with valid selectors for the table and data (hSel, dSel, cSel).
Types ¶
type Decoder ¶
type Decoder[T any] struct { // contains filtered or unexported fields }
Decoder is a struct for decoding a reader into a slice of structs.
It is used by the NewDecoder function.
It is not intended to be used directly.
Example:
type TableStruct struct {
A string `json:"a" seltabl:"a" hSel:"tr:nth-child(1) td:nth-child(1)" dSel:"tr td:nth-child(1)" cSel:"$text"`
B string `json:"b" seltabl:"b" hSel:"tr:nth-child(1) td:nth-child(2)" dSel:"tr td:nth-child(2)" cSel:"$text"`
}
func main() {
r := strings.NewReader(`
<table>
<tr>
<td>a</td>
<td>b</td>
</tr>
<tr>
<td> 1 </td>
<td>2</td>
</tr>
<tr>
<td>3 </td>
<td> 4</td>
</tr>
<tr>
<td> 5 </td>
<td> 6</td>
</tr>
<tr>
<td>7 </td>
<td> 8</td>
</tr>
</table>
`)
p, err := seltabl.NewDecoder[TableStruct](r)
if err != nil {
panic(err)
}
for _, pp := range p {
fmt.Printf("pp %+v\n", pp)
}
}
func NewDecoder ¶
func NewDecoder[T any](r io.ReadCloser) *Decoder[T]
NewDecoder parses a reader into a slice of structs.
It is used by the NewFromReader function.
This allows for decoding a reader into a slice of structs.
Similar to the json.Decoder for brevity.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package cmd is the command package for the application
|
Package cmd is the command package for the application |
|
cmds
Package cmds contains the commands for the application
|
Package cmds contains the commands for the application |
|
examples
|
|
|
example1
command
|
|
|
example2
command
|
|
|
example3
command
|
|
|
example4
command
|
|
|
example5
command
|
|
|
internal
|
|
|
tools
|
|
|
seltabl-lsp
module
|
|
|
seltabls
module
|