使用XElement

时间:2019-01-04 02:00:21

标签: c# xml xml-parsing xelement xmlconvert

我有一个返回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)的东西吗?

我查看了下面的链接,但找不到对我的问题的满意答案-

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/valid-content-of-xelement-and-xdocument-objects3

0 个答案:

没有答案