Вызов текстового сообщения из файла XML - PullRequest
0 голосов
/ 13 мая 2009

В настоящее время я занимаюсь разработкой программного обеспечения, которое использует многоуровневую архитектуру с использованием Visual Studio 2008 и C #. В этой системе я хочу сохранить все текстовые сообщения (которые будут показаны с использованием окон сообщений при необходимости) в файле XML, чтобы при обновлении любого сообщения мне не приходилось компилировать всю систему. Как я могу сделать это? Какова будет структура файла XML? Как сообщения будут вызываться из кода C #? Пожалуйста, будьте наглядны и приведите пример. Спасибо.

Ответы [ 3 ]

1 голос
/ 14 мая 2009

Я бы создал класс, который использовал бы .NET DataSet и DataTable для хранения идентификаторов и сообщений (и всего, что вам нужно).

Таким образом, класс может использовать DataSet.WriteXML () и DataSet.ReadXML () для сохранения / загрузки из любого файла, который вы укажете, и вам не придется беспокоиться о «ручной обработке» формата XML самостоятельно. *

Это звучало как удобный класс, поэтому я написал его как «доказательство концепции»:

'*************************************************************************
'   Class: MsgFile
'  Author: Ron Savage
'    Date: 05/14/2009
'
' This class is an example for using an XML file to hold messages to be
' displayed by an application.
'
' Modification History
' Date        Init Comment
' 05/14/2009  RS   Created.
'*************************************************************************
Imports Microsoft.VisualBasic
Imports System.IO

Public Class MsgFile
   '*************************************************************************
   ' Class Variables
   '*************************************************************************
   Private MsgFile As String
   Private msgData As DataSet
   Private msgTable As DataTable

   '*************************************************************************
   '     Sub: New()
   '  Author: Ron Savage
   '    Date: 05/14/2009
   '
   ' Creates a new MsgFile from an existing file, or creates an empty one
   ' with the specified file name.
   '*************************************************************************
   Sub New(ByVal msg_File As String)
      Dim srcFile As New FileInfo(msg_File)

      If (srcFile.Exists()) Then
         msgData = New DataSet()

         Load(msg_File)
      Else
         NewFile(msg_File)
      End If
   End Sub

   '*************************************************************************
   '     Sub: NewFile()
   '  Author: Ron Savage
   '    Date: 05/14/2009
   '
   ' Creates a new XML message file.
   '*************************************************************************
   Sub NewFile(ByVal msg_File As String)
      Me.MsgFile = msg_File

      If (IsNothing(msgData)) Then
         msgData = New DataSet("MyAppMessages")
         msgTable = New DataTable("Messages")

         msgTable.Columns.Add(New DataColumn("Id", GetType(System.Int32), Nothing, MappingType.Attribute))
         msgTable.Columns.Add(New DataColumn("Text", GetType(System.String), Nothing, MappingType.Attribute))

         msgData.Tables.Add(msgTable)

         setMessage(0, "New file created")
      End If

      Save()
   End Sub

   '*************************************************************************
   '     Sub: Load()
   '  Author: Ron Savage
   '    Date: 05/14/2009
   '
   ' Loads an existing XML message file into the dataset.
   '*************************************************************************
   Public Sub Load(ByVal msgFileName As String)
      Dim srcFile As FileInfo = Nothing
      Me.MsgFile = msgFileName

      srcFile = New FileInfo(msgFileName)

      msgData.Clear()

      If (srcFile.Exists()) Then
         msgData.ReadXml(msgFileName)

         msgTable = msgData.Tables("Messages")
      End If
   End Sub

   '*************************************************************************
   '     Sub: Save()
   '  Author: Ron Savage
   '    Date: 10/05/2008
   '
   ' This routine saves the DataSet to an XML file.
   '*************************************************************************
   Public Overridable Sub Save()
      If (Not IsNothing(msgData) And Not MsgFile.Equals("")) Then
         Dim fileWriter As StreamWriter = New StreamWriter(MsgFile)


         msgData.WriteXml(fileWriter)

         fileWriter.Close()
      End If
   End Sub

   '*************************************************************************
   '     Sub: getMessage()
   '  Author: Ron Savage
   '    Date: 05/14/2009
   '
   ' This gets the text of the message.
   '*************************************************************************
   Public Function getMessage(ByVal msgId As String) As String
      Dim rowsFound() As System.Data.DataRow
      Dim msgText As String = ""

      If (Not IsNothing(msgTable)) Then
         rowsFound = msgTable.Select("Id = " + msgId.ToString)

         If (rowsFound.Length > 0) Then
            msgText = rowsFound(0).Item("Text").ToString
         End If

      End If
      Return (msgText)
   End Function

   '*************************************************************************
   '     Sub: setMessage()
   '  Author: Ron Savage
   '    Date: 05/14/2009
   '
   ' This sets the text of the message.
   '*************************************************************************
   Public Sub setMessage(ByVal msgId As Integer, ByVal msgText As String)
      Dim rowsFound() As System.Data.DataRow
      Dim msgRow As System.Data.DataRow

      If (Not IsNothing(msgTable)) Then
         rowsFound = msgTable.Select("Id = " + msgId.ToString)

         If (rowsFound.Length > 0) Then
            msgRow = rowsFound(0)

            msgRow.Item("Id") = msgId
            msgRow.Item("Text") = msgText
         Else
            msgRow = msgTable.NewRow()

            msgRow.Item("Id") = msgId
            msgRow.Item("Text") = msgText

            msgTable.Rows.Add(msgRow)
         End If
      End If

      Save()
   End Sub
End Class
1 голос
/ 13 мая 2009

Лучшим выбором для вашего сценария может быть библиотека Resource Satellite. Это отдельная DLL, которая содержит набор ресурсов, которые динамически загружаются в ваше приложение. Это сколько разных приложений делают локализацию. И самое главное, есть много инструментов, которые поддерживают этот тип функций.

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

0 голосов
/ 14 мая 2009

Возможно, вы захотите добавить свой собственный раздел в файл app.config для хранения ваших сообщений. Однако для этого потребуется обновлять файл app.config при каждом изменении сообщения.

http://msdn.microsoft.com/en-us/library/system.configuration.configurationsection.aspx

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