При работе с XML в Golang вы можете получить ошибку по типу XML syntax error: illegal character code.
У меня, например, полная ошибка такая: XML syntax error on line 247043: illegal character code U+001F. Работал я с пакетом github.com/antchfx/xmlquery, но ошибка из базового пакета go encoding/xml.
Ошибка значит то, что в файле есть какие-то посторонние символы, которые парсер не может обработать.
Как исправить
Для исправления есть 2 пути:
- Попытаться удалить вручную не верные символы из xml файла.
- Отфильтровать все символы в xml строке, прежде чем парсить.
Удаление не нужных символов
Парсер, как правило, не спотыкается на обычных печатных символах. Ошибка происходит на системных знаках.
Наш план:
- Вычитать XMLфайл
- Отфильтровать символы
- Передать новую строку в парсер XML
Код:
// Читаем файл
fileBytes, err := ioutil.ReadFile("file.xml")
if err != nil {
panic(err)
}
// Набор байт из файла превращаем в строку
xmlStr := string(fileBytes)
// Фильтруем символы, оставляя только видимые
xmlStr = strings.Map(func(r rune) rune {
if unicode.IsGraphic(r) {
return r
}
return -1
}, xmlStr)
// Отфильтрованную успешно строку передаем в парсер
xmlDoc, err := xmlquery.Parse(strings.NewReader(xmlStr))
if err != nil {
panic(err)
}
Работают тут две функции:
- strings.Map - применяет фильтр ко всем символам в строке. Если фильтрующая функция возвращает отрицательное значение, символ удаляется.
- unicode.IsGraphic - проверяет символ на то что он "видимый", а не какой-то системный, который не показывается пользователям.
Пожалуйста, оцените на сколько вам понравилась статья!
Голосов: 3 Среднее: 2.3