Aleksandr
зачем нужен xml.Name ?
обозначить имя корневого тега
Aleksandr
что такое корень и что такое тег понятно?
Dmitry
что такое корневой тег ?
Aleksandr
Aleksandr
xml - это структура из вложенных в друг друга тегов. тег верхнего уровня - корневой тег
Dmitry
тогда почему в https://tutorialedge.net/golang/parsing-xml-with-golang/ корневой тег имеет разные значения ? всегда думал что у дерева корень только один
Dmitry
и зачем в каждой ноде писать корневой тэг ?
Aleksandr
и зачем в каждой ноде писать корневой тэг ?
чтобы знать какое имя давать корневому тегу
heavycharged
смотри, если у тебя структура, скажем такая: (псевдокод) type User struct { XMLName xml.Name // user ID int xml:"id" } то в итоге получишь: <user> <id>5</id> </user>
heavycharged
тег, в который структура будет обернута, короче говоря
Dmitry
но я понял суть. спасибо
Cat
видимо слово "корневой" сбивает столку
Dmitry
это тэг ноды для которого предназначена структура
heavycharged
да. не столько корневой, сколько родительский для конкретной структуры
Aleksandr
это тэг ноды для которого предназначена структура
да, являющийся корнем для ниже лежащей структуры тегов
Dmitry
а возможно как то миновать создание промежуточной структуры EntryList? код https://pastebin.com/BJ55fRtu xml: https://pastebin.com/FFFwi75p
heavycharged
Entries []Entry `xml:"Entries>Entry"
heavycharged
как-то так, вроде
heavycharged
или даже так: type StringTableFile struct{ XMLName xml.Name `xml:"StringTableFile"` Name string `xml:"Name"` Entries []Entry `xml:"Entries"` }
heavycharged
зачем вообще делать EntryList?
Dmitry
Entries []Entry `xml:"Entries>Entry"
1й вариант работает
Dmitry
спасибо
Dmitry
зачем вообще делать EntryList?
потому что когда я пытался Entries []Entry `xml:"Entry" то массив выходил пустой
heavycharged
можешь попробовать Entries []Entry `xml:"Entries>Entry" и в type Entry struct { убрать вообще xml.Name
Dmitry
2 вариант не работает : 2018/05/26 20:01:42 expected element type <Entry> but have <Entries>
Dmitry
можешь попробовать Entries []Entry `xml:"Entries>Entry" и в type Entry struct { убрать вообще xml.Name
убрал. работает. теперь мне непонятно. так нужен XmlName в каждой структуре или не нужен ?
heavycharged
он не обязателен, вообще
Dmitry
совсем необязателен или для всех кроме абсолютного корня необязателен ?
heavycharged
Я не много работал с XML, и тоже в свое время немного путался. Нужно доку читать. The name for the XML elements is taken from, in order of preference: - the tag on the XMLName field, if the data is a struct - the value of the XMLName field of type Name - the tag of the struct field used to obtain the data - the name of the struct field used to obtain the data - the name of the marshaled type
Dmitry
окей. спасибо. пойду читать
Aleksey
И лучше https://golang.org/pkg/encoding/xml/#Unmarshal читать
Dmitry
а как заставить xml маршалить <tag></tag> в <tag /> ?
Dmitry
окей, видимо никак.
Aleksey
окей, видимо никак.
Ну это сокращение... хотя если представлять html из xml тут беда... если <br> валидно и как <br/> то <br></br> боюсь не пройдет.
Антон
Пиши свой сериализатор для каждой структуры. Кто мешает?
Тот факт, что это занимает время, код требует минимального участия мозга и потому подвержен ошибкам и тот факт, что после изменения структур нужно не забывать вносить изменения в сериализатор и десериализатор?
Aleksey
https://github.com/golang/go/issues/21399
Daniel
https://github.com/tdewolff/minify#xml
Aleksey
https://github.com/tdewolff/minify#xml
Двойная работа... может проще стрингс сплит "></", ""
Daniel
возможны разные вадза
Aleksey
Минифайер и комменты, возможно нужные, порежет. Хотя можно свой обработчик сделать для минифаера, на основе существующего, или коммитнуть своё видение, с допопциями "не резать /точтомненужно/"
Daniel
я бы слазал в код, выдернул оттуда нужное, и вставил к себе
Daniel
цинично так
Aleksey
Не, зачем? Там же модулями обработчиками.
Daniel
но в любом случае - зачем это надо?
Daniel
читать xml глазами дурных нет
Daniel
уменьшать количество байт есть deflate
Aleksey
Я тут https://github.com/Supme/gonder/tree/master/campaign/minifyEmail так и сделал, взял его minify/html и добавил "не резать комменты"
Daniel
вы так говорите, как будто это что-то плохое
Антон
Конечно, плохое
Aleksey
Я вот каюсь... надо коммит сделать, но это перед отпуском было. А гугль html в письмах больше 10кб режет. Макетов много и руками устают ребята в онлайн минифаерах резать, накидал опциональную галочку минимизировать при отправке
Aleksey
Чем же?
Человек писал, поделился со всеми. Если что-то ты полезное добавил, нужно тоже поделиться, вдруг это кому-то тоже нужно.
Daniel
Это другое.
Aleksey
Так лучше сразу CPDD сделать над encoding/xml с short tag
inztar
Прив. Интересно стало как в го сделаны make и new, но не смог найти в исходниках. Можете дать ссыль на этот участок кода?
Dmitry
xml: как заставить строку не конверитровать при маршалинге &amp в & и тому подобное? пробую innerxml указать как свойство строки - вообще перестает работать
Dmitry
DefaultText string xml:"DefaultText,innerxml" xml: invalid tag in field DefaultText of type main.Entry: "DefaultText,innerxml"
Dmitry
а ладно, понял что надо выделять ноду в отдельную структуру для использования innerxml
heavycharged
,cdata попробуйте
heavycharged
сейчас поищу
Dmitry
,cdata попробуйте
то же самое, вид сбоку : xml: invalid tag in field DefaultText of type main.Entry: "DefaultText,cdata"
heavycharged
структуру вашу покажите
heavycharged
Entry которая
Dmitry
хотелось бы что то вроде DefaultText string xml:"DefaultText>innerxml"
Dmitry
type Entry struct { DefaultText string xml:"DefaultText" FemaleText string xml:"FemaleText" }
Dmitry
мне просто надо то что в значении ноды DefaultText без обработки спецсимволов взять
Dmitry
ладно. выделю в структуру RawString и не буду париться
heavycharged
У вас нелогичная структура.
heavycharged
DefaultText, FemaleText - это все не надо
heavycharged
просто напишите xml:",cdata"