繁体   English   中英

为什么我在有效的XML上获得XmlException?

[英]Why am I getting an XmlException on valid XML?

在测试接受字符串的方法并将该字符串作为属性添加到XElement(以当前时间作为值)的过程中。 要使用XElement.SetAttributeValue(XName name, object value) (我知道添加/更新XElement属性的唯一方法),我使用XName.Get将提供的字符串转换为XName。

遇到 的问题是 XName.Get (堆栈跟踪显示它来自System.Xml.XmlConvert.VerifyNCName )在某些情况下抛出XmlException,声称不允许某些字符。 一个例子是0x02FF(˱)。 我不希望这个字符被允许,但XML规范似乎说整个范围0x00F8到0x02FF是有​​效的。

我是否在有效字符上获得此异常,或者我是否误解了规范?

.NET Framework 4和.NET Framework 4.5中的AFAIR Xml堆栈基于Xml规范的第4版,而不是第5版。 当您查看此规范时,您会注意到名称中不允许所有有效字符。 特别是看看这个 ,看看是什么字母 ,你会看到范围[0x02C2-0x0385]中的字符被排除在外。

此外,.NET Framework 4和4.5中的Xml堆栈尚未移至第5版的原因是,由于字符范围的更改,相同的Xml文档可能有效或无效(这实际上是您遇到的问题),具体取决于处理器而不是文档本身(符合第5版的Xml文档仍然可以有1.0版本)。 因此,有效的文档(符合第5版)将被旧解析器拒绝为无效。 它也没有相反的方式。 如果具有第5版能力的Xml解析器收到的文件的名称中的字符在之前无效但在第5版中生效,则无法判断该文档是否应该被拒绝为本应该在5之前的文档。版本和格式不正确或它是第5版文件,应该被接受。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM