使用TAG名称构建XML包含':'字符,十六进制值0x3A

时间:2017-04-04 16:54:36

标签: c# xml

我检查了许多具有相同标题的线程,但它们都是演示不同于我的问题。所以,如果我错了,有人可以指出我正确的主题。

我正在构建我自己的SAX XML解析器,旁边将用于将XML文件发送到解析器的测试工具,然后测试工具将从SAX解析器接收触发事件以重建XML并与传输的XML进行比较验证解析器的正确操作。

无论如何,我正在使用绿洲测试用例,特别是(o-p04pass1)

<doc>
<abcdefghijklmnopqrstuvwxyz/>
<ABCDEFGHIJKLMNOPQRSTUVWXYZ/>
<A01234567890/>
<A.-:̀·/>
</doc>

所以要重构<A.-:̀·/>,我正在使用以下C#代码,我得到异常System.Xml.XmlException:':'字符,十六进制值0x3A,不能包含在名称中。使用以下行

currentXMLElement = new XElement(startString[0], "");

startString [0]将包含A.-:̀·,这将导致异常。 我的问题是: - :根据最新标准https://www.w3.org/TR/xml/#NT-NameStartChar是名称中可接受的字符之一,为什么我得到例外? - 我使用正确的函数重建XML,如果没有,最好的方法是什么?

谢谢, Mohammed Fawzy

1 个答案:

答案 0 :(得分:1)

对于今天的大多数人来说,“XML”的意思是“XML plus Namespaces”,即XML 1.0加上XML Namespaces 1.0的组合(或者有时是XML 1.1加上Namespaces 1.1,尽管这种组合不太受欢迎)。理论上,XML 1.0可以在没有命名空间的情况下使用,但几乎没有人这样做。

所以你可能已经找到了一个测试套件,它以XML 1.0允许但XML Namespaces 1.0不允许的方式使用冒号,只有你可以决定你想用这些测试用例做什么。您的XML解析器是否接受它们取决于它选择遵循的标准,以及可能的配置方式。在现实世界中(与一致性测试的世界不同),符合XML 1.0但不符合XML Namespaces 1.0的文档几乎没有实际意义。