2010-10-04 3 views
3

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

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

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

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

+0

измените это так, чтобы ваши XML и XML комментарии отображаются (Использование обратный символ для маркировки блоков кода) – Spudley

+1

Что именно вы ожидаете от комментариев, чтобы получить десериализацию? Кодовый комментарий? – Oded

+0

Укажите, пожалуйста, используемую вами библиотеку. .NET System.Xml.Serialization package? – LarsH

ответ

0

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

2

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

Однако, если вы используете XmlReader (как @Amigable said), который вы передаете методу Deserialize(), вы можете использовать этот XmlReader to separately traverse the tree для поиска комментариев.

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

Update: немного разработки на использование 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(), а затем повторно использовать его, но, по-видимому, он только для переходов и поэтому не может быть сброшен в начало. Так После вашей десериализации, повторно открыть «test.xml» с XmlReader:

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 
+0

Гораздо лучший ответ, чем мой, спасибо. –

+0

"" XmlSerializer objSer = новый XmlSerializer (typeof (CustomSchema)); StreamReader srmRdr = новый StreamReader ("Test.XML"); objForm = (CustomSchema) objSer.Deserialize (srmRdr); "" Выше мой код десериализатора. В объекте objForm я не получаю комментарии XML. Что я пытаюсь сделать, так это мне нужно отредактировать существующий файл XMll добавлять новые элементы и снова сериализоваться в один и тот же файл XMl. Но в настоящее время все работает нормально, но я не могу сохранить комментарии, которые существовали в исходном файле XML. Я использую .NETCF 2.0 в WM 6.5. Как я могу это сделать? –

+0

@Prabu: см. Конец моего ответа, который я собираюсь обновить ... – LarsH