反序列化XML文件中的注释

3

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

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

并且我注意到模式中没有可用于注释节点的条目。

我该如何将XML文件中的注释读取到对象中?


请编辑此代码块以使您的 XML 和 XML 注释显示出来(使用反引号字符) - Spudley
1
你期望将注释反序列化成什么?是代码注释吗? - Oded
请指定您正在使用的库,例如.NET的System.Xml.Serialization包? - LarsH
2个回答

2
对象序列化的目的是保存对象的状态,并在以后恢复它。对象字段被映射到XML元素和属性,反之亦然。XMLSerializer不会将任何内容映射到注释或反之亦然,因此您无法将注释反序列化到对象中的任何内容。
然而,如果您使用一个XmlReader(如@Amigable所说),将其传递给Deserialize()方法,然后可以使用XmlReader单独遍历树形结构查找注释。
不幸的是,这使得将注释连接到反序列化成员变得更加困难,但也许您可以使用反序列化节点事件处理程序来帮助解决这个问题。
更新:关于使用XmlReader和Deserialize的一些详细说明:
您列出了您的代码:
XmlSerializer objSer = new XmlSerializer(typeof(CustomSchema));
StreamReader srmRdr = new StreamReader("Test.XML");
objForm = (CustomSchema)objSer.Deserialize(srmRdr);

“我对.NETCF或WM一无所知。(我之前也不了解XmlSerializer,但现在我正在查看文档。)然而这就是我之前试图描述的内容。
我认为你可以使用XmlReader进行Deserialize(),然后重新使用它,但显然它只能向前移动,因此不能将其重置到开头。因此,在反序列化后,重新使用XmlReader打开“Test.XML”:”
XmlReader xmlRdr = XmlReader.Create("Test.XML");

然后使用解析 此处显示的代码
    // 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注释。 我想做的是编辑现有的XMll文件以添加新元素,并再次序列化到同一XMl文件。 但目前一切都正常,但是我无法保留原始XML文件中存在的注释。 我正在使用WM 6.5中的.NETCF 2.0。我该怎么做? - Prabu Kumar

0

它没有说明您使用的编程语言,但基于this example,这与您尝试做的事情完全相反, 您是否可以像在那个问题的被接受答案中插入XmlWriter一样插入XmlReader?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接