我有一个返回XElement对象的C#API。这个XElement对象是通过类似于-
的代码构造的string invalidXML = "a \v\f\0";
XElement fe = new XElement("Data", invalidXML);
Console.WriteLine(fe);
通过观察,我知道当试图将无效的XML字符传递给上面的XElement构造函数时,会抛出 System.Argument 异常。
事实证明,传递带有InvalidXML字符的字符串时,XElement不会引发错误。如果您尝试通过说Console.WriteLine(fe)打印XElement,那么您将从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)的东西吗?
我查看了下面的链接,但找不到对我的问题的满意答案-