.net - 反序列化 XML 文件中的注释

标签 .net xml object comments

我正在尝试反序列化以下示例 XML 文件。我已经为此 XML 文件创建了架构。在架构的帮助下,我能够将 XML 反序列化为对象。

但我的问题是我的 XML 文件上有一个 XML 注释(例如:<!----Test-->)。反序列化器没有将注释从 XML 读取到我使用模式创建的对象。

我还注意到在评论节点的模式中没有可用的条目。

如何从 XML 文件读取注释到对象?

最佳答案

对象序列化的要点是保存对象的状态,并在以后恢复它。对象字段映射到 XML 元素和属性,反之亦然。 XMLSerializer 不会将任何内容映射到注释,反之亦然,因此您无法将注释反序列化到对象中的任何内容。

但是,如果您使用传递给 Deserialize 的 XmlReader(如@Amigable 所说) () 方法,然后您可以使用 XmlReader to separately traverse the tree寻找评论。

不幸的是,这使得将评论连接到反序列化成员变得更加困难,但也许您可以使用反序列化节点事件处理程序来帮助实现这一点。

更新:关于使用反序列化的 XmlReader 的一些详细说明:

您将代码列为:

XmlSerializer objSer = new XmlSerializer(typeof(CustomSchema));
StreamReader srmRdr = new StreamReader("Test.XML");
objForm = (CustomSchema)objSer.Deserialize(srmRdr);

我对 .NETCF 或 WM 一无所知。 (我对 XmlSerializer 也一无所知,但我只是在看 the docs 。)然而,这就是我在上面试图描述的内容。

我认为您可以为 Deserialize() 使用 XmlReader,然后重新使用它,但显然它是只向前的,因此不能重置到开头。因此,在反序列化之后,使用 XmlReader 重新打开“Test.XML”:

XmlReader xmlRdr = XmlReader.Create("Test.XML");

然后使用解析code shown here :

    // Parse the file
    while (xmlRdr.Read())
    {
        switch (xmlRdr.NodeType)
        {
            case XmlNodeType.Element:
                // You may need to capture the last element to provide a context
                // for any comments you come across... so copy xmlRdr.Name, etc.
                break;
            case XmlNodeType.Comment:
                // Do something with xmlRdr.value

关于.net - 反序列化 XML 文件中的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3853947/

相关文章:

c# - 可以通过 $http 但不能通过 ngResource 调用 WCF 服务

.net - 如何使用 Entity Framework 实现跨 DBMS 插入忽略?

c# - 如何使用 WinForms 中的 Web 浏览器控件访问 HTML 文档的 <HEAD> 元素?

javascript - 使用javascript将复杂数组转换为简单数组

java - 从不同类的返回值检索对象时出现编译时错误。

r - 如何在 R 中并排显示列表 - 列表的 "cbind"?

.net - Outlook 2003 和 Outlook 2007 插件 COM 资源发布

xml - haskell xml使用HXT库更新文本

xml - 什么是与 XPath 相关的范围内命名空间?

javascript - 使用 XML 文档中的内容更新链接文本