2016-03-21 15 views
0

XML dosyalarını kullanarak bazı uygulama verilerini kaydetmeye karar verdim. XML dosyalarına çok yeni geldim, bu yüzden benimle kal.VB.NET: XML Dosyasından Birden Çok Özellik ve Tablo Oku

  1. amacı nedir: Ben birkaç soru var

    <?xml version="1.0" encoding="utf-8"?> 
    <config> 
        <name>testConfigName</name> 
        <type>testConfigType</type> 
        <DocumentElement> 
         <inputs> 
          <inputName>testInputName1</inputName> 
          <inputValue>testInputValue1</inputValue> 
         </inputs> 
         <inputs> 
          <inputName>testInputName2</inputName> 
          <inputValue>testInputValue2</inputValue> 
         </inputs> 
        </DocumentElement> 
        <DocumentElement> 
         <outputs> 
          <outputName>testOutputName1</outputName> 
          <outputValue>testOutputValue1</outputValue> 
         </outputs> 
        </DocumentElement> 
    </config> 
    

    : Böyle bir dosyada

    Public Class config 
        Public Property name As String 
        Public Property type As String 
    
        Public Property inputsTable As DataTable 
        Public Property outputsTable As DataTable 
    
        Public Sub WriteXML(filePath As String) 
         Using writer As XmlWriter = XmlWriter.Create(filePath) 
          writer.WriteStartDocument() 
          writer.WriteStartElement("config") 
    
          writer.WriteElementString("name", Me.name) 
          writer.WriteElementString("type", Me.type) 
    
          Me.inputsTable.WriteXml(writer) 
          Me.outputstable.WriteXml(writer) 
    
          writer.WriteEndElement() 
          writer.WriteEndDocument() 
         End Using 
        End Sub 
    End Class 
    

    WriteXml alt sonuçları:

    Böyle bir sınıf) var XML dosyasındaki "kök düğümü" Burada kodumun çalışmasını sağlamak için bir node "config" oluşturdum, ama ben gerçekten neden gerekli olduğunu anlamıyorum.

  2. WriteStartDocument/WriteEndDocument gerekli mi?

  3. Bu dosyayı yeniden uygulamamın içine nasıl uygulayabilirim? Özellikle tabloları çıkartmakta zorlanıyorum. Kullandığım tek unsurları dışarı almak mümkün:

    Using reader As XmlReader = XmlReader.Create(filePath) 
        While reader.Read() 
         Select Case reader.NodeType 
          Case XmlNodeType.Element 
           Select Case reader.Name 
            Case "name" 
             name = reader.ReadElementContentAsString() 
            Case "type" 
             type = reader.ReadElementContentAsString() 
           End Select  
         End Select 
        End While 
    End Using 
    

    ama bu nasıl birleştirileceğini (veya eğer mümkünse) bilmiyorum:

    inputsTable.ReadXml(reader) 
    outputsTable.ReadXml(reader) 
    

    O ReadXml gibi görünüyor may Aslında yapmaya çalıştığım şey için çalışmaz (belirli tabloları okuyarak) ve basit tek masalı XML yapıları içindir, ancak bunu kesin olarak doğrulayamadım.

Herhangi bir yardım büyük takdir edilecektir!

+1

Aksine bir özellik Ignore nasıl kod sadece birkaç satır içinde '(Config'in) bütün bir' Listesini yük/kaydetmek – Plutonix

+0

onu misiniz Bir örnek vermek/vermek mümkün mü? Kısaca serileştirme sürecine baktım ama bulduğum şey aslında XmlReader/XmlWriter'den daha karmaşık görünüyordu, ama kesinlikle tekrar gözden geçirmekti. – Kevin

+1

[Sınıf başka bir sınıfın listesini devralıyorken] (http://stackoverflow.com/a/23523553/1070452) başlığı yanıltıcı – Plutonix

cevap

3

Bu kodu deneyin, .Net serializer sizin için çok çalışıyor.

Public Class config 
    Public Property name As String 
    Public Property type As String 

    Public Property inputsTable As DataTable 
    Public Property outputsTable As DataTable 

    Public Sub WriteXML(filePath As String) 

     Dim writer As New XmlSerializer(GetType(config)) 
     Dim file As New StreamWriter(filePath) 
     writer.Serialize(file, Me) 
     file.Close() 
    End Sub 

    Public Shared Function ReadXML(filePath As String) As config 

     Dim reader = New XmlSerializer(GetType(config)) 
     Dim file = New StreamReader(filePath) 
     Dim fileData = CType(reader.Deserialize(file), config) 

     Return fileData 

    End Function 

End Class 

BTW bu kod desenleri kolayca sağ tıklayarak ulaşabilir ve edebilirsiniz parçacıkları şunlardır: tıklamak takın Pasajı -> Veriler - LINQ -XML vb ... -> XML -> XML Okuma/XML Yazma -> dan/sınıfa.

, tekerleği yeniden icat XML çeşitli seri düşünün daha

<XmlIgnore> 
Public Property inputsTable As DataTable 
+0

Cevabınız için teşekkürler! Belirli özelliklerin dizileşmesini önlemek için bir yol biliyor musunuz? – Kevin

+1

Seri hale getiricinin bir özelliği yoksaymasını sağlamak için, özellik özelliğini kullanın: Public Property inputsTable DataTable olarak –

+1

Reddetme kodunu yanıtıma ekledim –

İlgili konular