Как убрать лишние символы в xml-файле?
Исключение:
Знак ".", шестнадцатеричное значение 0x00, не может стоять в начале имени, строка 1, позиция 2.
Код:
string content = File.ReadAllText(_xml_file);
XDocument doc = XDocument.Parse(content);
...
Штуки типа SanitizeXmlString
из https://seattlesoftware.wordpress.com/2008/09/11/hexadecimal-value-0-is-an-invalid-character/ не помогают — портится xml
-строка.
Файл по типу такого:
<?xml version="1.0" encoding="UTF-8"?>
<protocol name="protocol" date_time="2024-08-16T13:14:00" description="Test">
<check name="check1" description="RegularCTCheck" check_datetime="2024-08-16T13:14:00">
<header stationname="" type="" number="" />
<param standard="GOST" I1ном="" I2ном="" S2ном="" Rном="" Tизм="" Tном="" Ukn="" Ikn="" />
<result MagPercent="6.0%" Rизм="9.900 Ом" Rприв="9.900 Ом" Rпогр="0.0%" Ukn="156.452 В" Ikn="0.123237 А" Ukn2="0.000 В" Ikn2="0.000000 А" Ktr="1002.4" KtrPogr="0.0%" Ph="-176.6°" Pol="Negative" />
<VAC entriescount="13">
<VACentry number="1" Uизм="82.68 В" Iизм="1.5866 А" P="141.25824 Вт" U50Hz="82.6777 В" I50Hz="1.5866 А" />
<VACentry number="2" Uизм="82.19 В" Iизм="1.5148 А" P="128.75563 Вт" U50Hz="82.1941 В" I50Hz="1.5148 А" />
...
</VAC>
</check>
</protocol>
Ответы (1 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
Предположение, что это так называемый Byte Order Mark (BOM)
создаёт проблему.
void Main()
{
string _xml_file = @"...";
string content = File.ReadAllText(_xml_file);
string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
if (content.StartsWith(_byteOrderMarkUtf8, StringComparison.Ordinal))
{
content = content.Remove(0, _byteOrderMarkUtf8.Length);
}
XDocument doc = XDocument.Parse(content);
}
Вот как выглядит BOM
в начале XML
-файла: