0

我有一些代码读取 xml 文件作为计算机模型的输入(用 C++ 编写并使用 VS2012 编译)。在更新了一些输入数据的 XML 格式后,软件停止以新格式读取文件(代码已更改以适应新的数据格式),经过调查,很明显这是因为新的数据格式包括 XML 文件中的注释,xml 解析器 (msxml6) 将其计为子节点。因此,它读取的第一个子节点无法理解,软件按设计退出。

虽然我们现在已经解决了这个问题(通过从 XML 文件中删除非严格必要的注释),但我想知道是否有人知道为什么解析器认为这些注释是子节点?我的印象是注释应该被解析器忽略?

4

1 回答 1

2

在大多数 XML 的树模型(例如,DOM)中,注释确实是包含元素的子节点,并且由应用程序确保在读取树时跳过它们。

忘记这一点是一个常见的错误,并想象当您在没有注释的源文档上测试您的应用程序时,如果发件人选择包含注释,它将继续工作。

在将文档传递给应用程序之前从文档中去除注释是解决问题的一种方法(这是一个非常简单的 XSLT 转换),但如果应用程序首先被编写为处理注释会更好。

于 2018-01-31T11:20:39.850 回答