У меня есть C # API, который возвращает объект XElement.Этот объект XElement создается с помощью кода, который выглядит следующим образом -
string invalidXML = "a \v\f\0";
XElement fe = new XElement("Data", invalidXML);
Console.WriteLine(fe);
Наблюдая за этим, я знаю, что при попытке передать недопустимый символ XML в конструктор XElement выше, System.Argument выдается исключение.
Таким образом, как оказалось, XElement не выдает ошибку, когда проходит строка с символами InvalidXML.Если вы попытаетесь напечатать XElement, скажем, через Console.WriteLine (fe), то получите исключение из XMLWriter-
System.ArgumentException: '', hexadecimal value 0x0B, is an invalid character.
at System.Xml.XmlEncodedRawTextWriter.InvalidXmlChar(Int32 ch, Char* pDst, Boolean entitize)
at System.Xml.XmlEncodedRawTextWriter.WriteElementTextBlock(Char* pSrc, Char* pSrcEnd)
at System.Xml.XmlEncodedRawTextWriter.WriteString(String text)
at System.Xml.XmlEncodedRawTextWriterIndent.WriteString(String text)
at System.Xml.XmlWellFormedWriter.WriteString(String text)
at System.Xml.Linq.ElementWriter.WriteElement(XElement e)
at System.Xml.Linq.XElement.WriteTo(XmlWriter writer)
at System.Xml.Linq.XNode.GetXmlString(SaveOptions o)
at System.Xml.Linq.XNode.ToString()
at System.IO.TextWriter.WriteLine(Object value)
at System.IO.TextWriter.SyncTextWriter.WriteLine(Object value)
at System.Console.WriteLine(Object value)
at TestLoggingForUNIT.Program.Main(String[] args) in C:\Users\shivanshu\source\repos\TestLoggingForUNIT\TestLoggingForUNIT\Program.cs:line 29
Мне кажется, что сам XElement не выполняет никакой проверки.Когда он печатается / сериализуется, в .NET внутренне вызывается средство записи XML, и именно тогда выдается исключение.
Мой вопрос заключается в том, что XElement всегда гарантирует, что исключение будет выдано, если недопустимыйПередается символ XML.
Другими словами, нужно ли проверять строку, которую я передаю, на наличие недопустимых символов XML?Используя что-то вроде XmlConvert.IsXmlChar (string)?
Я посмотрел ссылку ниже, но не смог найти удовлетворительный ответ на мой вопрос -
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/valid-content-of-xelement-and-xdocument-objects3