【问题标题】:Deserializing the comments in XML file反序列化 XML 文件中的注释
【发布时间】:2011-04-20 17:12:18
【问题描述】:

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

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

我还注意到,评论节点的架构中没有可用的条目。

如何从 XML 文件中读取 cmets 到对象?

【问题讨论】:

  • 请编辑此内容以便显示您的 XML 和 XML cmets(使用反引号字符标记代码块)
  • 您希望评论反序列化成什么?代码注释?
  • 请指定您正在使用的库,例如.NET 的 System.Xml.Serialization 包?

标签: .net xml object comments


【解决方案1】:

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

但是,如果您使用传递给 Deserialize() 方法的 XmlReader(如 @Amigable 所说),则可以使用该 XmlReader to separately traverse the tree 查找 cmets。

不幸的是,这使得将 cmets 连接到反序列化成员变得更加困难,但也许您可以使用反序列化节点事件处理程序来帮助解决这个问题。

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

您将代码列为:

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

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

我认为您可以将 XmlReader 用于 Deserialize() 然后重新使用它,但显然它是只向前的,因此不能重置为开头。所以在反序列化之后,用 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

【讨论】:

  • ""XmlSerializer objSer = new XmlSerializer(typeof(CustomSchema)); StreamReader srmRdr = new StreamReader("Test.XML"); objForm = (CustomSchema)objSer.Deserialize(srmRdr);"" 以上是我的反序列化代码。在 objForm 对象中我没有得到 XML cmets。我想要做的是我需要编辑现有的 XMll 文件以添加新的元素,并再次需要序列化到同一个 XMl 文件中。但目前一切正常,但我无法保留原始 XML 文件中存在的 cmets。我在 WM 6.5 中使用 .NETCF 2.0。我该怎么做?
【解决方案2】:

它没有说明您使用的是哪种编程语言,而是基于this example,这与您尝试做的完全相反, 您不能像插入 XmlWriter 那样插入 XmlReader 作为该问题的可接受答案吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多