Десериализация комментариев в файле XML - PullRequest
3 голосов
/ 04 октября 2010

Я пытаюсь десериализовать следующий образец XML-файла. Я создал схему для этого XML-файла. С помощью схемы я могу десериализовать XML в объект.

Но моя проблема в том, что у меня есть комментарии XML (например: <!----Test-->) к моему файлу XML.

А также я отметил, что в схеме нет записи для узла комментария.

Как я могу прочитать комментарии из файла XML к объекту?

Ответы [ 2 ]

2 голосов
/ 04 октября 2010

Цель сериализации объекта - сохранить состояние объекта и восстановить его позже. Поля объекта отображаются на элементы и атрибуты XML, и наоборот. XMLSerializer ничего не отображает в комментарии или наоборот, поэтому вы не можете десериализовать комментарии для чего-либо в вашем объекте.

Однако, если вы используете XmlReader (как сказал @Amigable), который вы передаете методу Deserialize (), вы можете использовать этот XmlReader для отдельного обхода дерева в поисках комментарии.

К сожалению, это затрудняет подключение комментариев к десериализованным членам, но, возможно, вы могли бы использовать обработчики событий узла десериализации, чтобы помочь с этим.

Обновление: небольшая проработка по использованию XmlReader с десериализацией:

Вы указали свой код как:

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

Я ничего не знаю о .NETCF или WM. (Я тоже ничего не знал о XmlSerializer, но я просто смотрю на документы .) Однако вот что я пытался описать выше.

Я подумал, что вы можете использовать XmlReader для Deserialize () и затем использовать его повторно, но, очевидно, он предназначен только для пересылки и поэтому не может быть сброшен в начало. Поэтому после десериализации повторно откройте «Test.XML» с помощью XmlReader:

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
0 голосов
/ 04 октября 2010

В нем не указано, какой язык программирования вы используете, но на основе этого примера , который является полной противоположностью тому, что вы пытаетесь сделать, не могли бы вы не вставить XmlReader, например, как XmlWriterвставлен как принятый ответ на этот вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...