Parsing upon deserialising

This commit is contained in:
Simon Martens
2025-11-14 15:29:51 +01:00
parent a46c171de7
commit 2e251f446f
9 changed files with 633 additions and 331 deletions

View File

@@ -3,15 +3,44 @@ package xmlmodels
import (
"encoding/json"
"encoding/xml"
"github.com/Theodor-Springmann-Stiftung/lenz-web/xmlparsing"
)
type Letter struct {
XMLName xml.Name `xml:"letterText"`
Letter int `xml:"letter,attr"`
Pages []Page `xml:"page"`
Hands []RefElement `xml:"hand"`
Content string `xml:",innerxml"`
Chardata string `xml:",chardata"`
XMLName xml.Name `xml:"letterText"`
Letter int `xml:"letter,attr"`
Pages []Page `xml:"page"`
Hands []RefElement `xml:"hand"`
HTML xmlparsing.Parsed[LenzTextHandler, *LenzParseState] `xml:"-"`
}
func (l *Letter) UnmarshalXML(dec *xml.Decoder, start xml.StartElement) error {
type alias struct {
XMLName xml.Name `xml:"letterText"`
Letter int `xml:"letter,attr"`
Pages []Page `xml:"page"`
Hands []RefElement `xml:"hand"`
Inner string `xml:",innerxml"`
}
var data alias
if err := dec.DecodeElement(&data, &start); err != nil {
return err
}
l.XMLName = data.XMLName
l.Letter = data.Letter
l.Pages = data.Pages
l.Hands = data.Hands
parsed, err := parseText(Get(), data.Inner)
if err != nil {
return err
}
l.HTML = parsed
return nil
}
func (l Letter) Keys() []any {