Наш проект был преобразован для использования XDocument из XmlDocument несколько дней назад, но мы обнаружили странное поведение при обработке сущности XML в значении атрибута с помощью XDocument.Parse, пример кода следующий:
Строка XML:
string xml = @ "";
Код XmlDocument.LoadXml и результат:
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
Console.WriteLine(xmlDocument.OuterXml);
Результат:
Код XDocument.Parse и исключение:
XDocument xDocument = XDocument.Parse(xml);
Console.WriteLine(xDocument.ToString());
Исключение:
Первое случайное исключение типа 'System.Xml.XmlException'произошла в System.Xml.dll '.', шестнадцатеричное значение 0x00, является недопустимым символом.Строка 1, позиция 18. в System.Xml.XmlTextReaderImpl.Throw (исключение e) в System.Xml.XmlTextReaderImpl.Throw (String res, String [] args) в System.Xml.XmlTextReaderImpl.Throw (Int32 pos,String res, String [] args) в System.Xml.XmlTextReaderImpl.ParseNumericCharRefInline (Int32 startPos, логическое раскрытие, StringBuilder internalSubsetBuilder, Int32 & charCount, EntityType & entityType & entityTypeв System.Xml.XmlTextReaderImpl.HandleEntityReference (Boolean isInAttributeValue, EntityExpandType expandType, Int32 & charRefEndPos) в System.Xml.XmlTextReaderImpl.ParseAttributeV.Exx.arx.ExTar_Text.Text.Teat_Text_DataText_DateText_DateE.XmlTextReaderImpl.ParseElement () в System.Xml.XmlTextReaderImpl.ParseDocumentContent () в System.Xml.XmlTextReaderImpl.Read () в System.Xml.Linq.XDocument.Load (XmlReader reader, LoadOpопций) в System.Xml.Linq.XDocument.Parse (текст строки, параметры LoadOptions) в System.Xml.Linq.XDocument.Parse (текст строки)
Похоже, что"& # x0;"является недопустимым символом, поэтому мы изменяем значение на допустимый символ, такой как "` ", тогда оба метода работали хорошо.
Есть ли способ изменить поведение XDocument.Parse, чтобы игнорировать недопустимый символ в атрибуте, напримерXmlDocument.LoadXml делает?