2010-02-15 5 views
0

J'ai reçu une collection de fichiers xsd associés et une feuille de calcul contenant des informations xpath. J'ai besoin de créer un fichier XML conforme aux fichiers du schéma et de le remplir avec des données provenant d'une base de données. Ce sera la première fois que je me pencherai sur les classes XML dans le framework .NET.Mise en route de l'utilisation de XML dans .NET

Quels cours m'aideront le plus rapidement à destination?

Les données de la base de données peuvent facilement dépasser 10 000 enregistrements, ce qui fait que la mémoire et les performances d'E/S posent également problème.

Répondre

0

http://msdn.microsoft.com/en-us/library/ms950721.aspx

Je commence ici. Cela devrait vous indiquer la bonne direction. La plus grande partie du gros travail que vous aurez à faire sera de récupérer les informations de la base de données dans votre instance d'objet.

+0

Je suis allé avec la sérialisation. J'utilise un ORM pour récupérer les données de la base de données. Le modèle de mon domaine et le schéma xml ne s'alignent pas parfaitement. J'ai donc utilisé un modèle de générateur pour simplifier le remplissage de l'objet de données sérialisé à partir de mon objet de domaine. –

0

Dernière vérification, le moyen le plus rapide d'exécuter XPath était d'utiliser une expression compilée sur une instance de XPathDocument.

Si vous voulez le créer en mémoire et l'interroger, je suggère plutôt XmlDocument, car il n'est pas en lecture seule. Si vous voulez le créer et l'écrire sur le disque pour le lire plus tard, utilisez simplement le répertoire XmlWriter. Évidemment, vous ne voulez pas utiliser n'importe quelle forme de concaténation de chaînes, indépendamment.

0

J'utiliserais un jeu de données dans votre cas. Comme cet exemple:

Imports System 
Imports System.Xml 
Imports System.Xml.Schema 
Imports System.IO 
Imports System.Drawing 
Imports System.Drawing.Drawing2D 
Imports System.Collections 
Imports System.Data 
Imports System.Windows.Forms 


Public Class MainClass 

    Shared Sub Main() 
     Dim DSStudentClasses As New DataSet() 
     Dim tmpNode As XmlNode 

     ' Load the schema into the DataSet 
     DSStudentClasses.ReadXmlSchema("StudentClasses.xsd") 

     ' Load the DataSet into the data document 
     Dim XDocStudents As New XmlDataDocument(DSStudentClasses) 

     ' Load the data into the data document 
     XDocStudents.Load("Students.xml") 

     Console.WriteLine("Students in DataSet:") 
     Dim Row As DataRow 
     For Each Row In DSStudentClasses.Tables("Student").Rows 
      Console.WriteLine("{0}:{1}", Row("Name"), Row("GPA")) 
      tmpNode = XDocStudents.GetElementFromRow(Row) 
      Console.WriteLine(_ 
        " Locker Combination (from XML, not DataSet): {0}", _ 
        tmpNode.SelectSingleNode("LockerCombination").InnerText) 

      Dim Subject As DataRow 
      For Each Subject In Row.GetChildRows("StudentClasses") 
       Console.WriteLine(" {0}", Subject("Title")) 
      Next 
     Next 
    End Sub 

End Class 

'student.xml 

'<?xml version="1.0" encoding="utf-8" ?> 
'<Students> 
' <Student ID="1"> 
' <Name>Joe Wang</Name> 
' <Age>30</Age> 
' <GPA>2.95</GPA> 
' <LockerCombination>10-12-35</LockerCombination> 
' <Class Title="Biology" Room="100" /> 
' <Class Title="English Lit" Room="101" /> 
' </Student> 
'</Students> 

'student.xsd 

'<?xml version="1.0" standalone="yes"?> 
'<xs:schema id="Students" xmlns="" 
'      xmlns:xs="http://www.w3.org/2001/XMLSchema"       xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
' <xs:element name="Students" msdata:IsDataSet="true"> 
' <xs:complexType> 
'  <xs:choice maxOccurs="unbounded"> 
'  <xs:element name="Student"> 
'   <xs:complexType> 
'   <xs:sequence> 
'    <xs:element name="Name" type="xs:string" 
'       minOccurs="0" msdata:Ordinal="0" /> 
'    <xs:element name="GPA" type="xs:float" 
'       minOccurs="0" msdata:Ordinal="2" /> 
'    <xs:element name="Class" 
'       minOccurs="0" maxOccurs="unbounded"> 
'    <xs:complexType> 
'     <xs:attribute name="Title" type="xs:string" /> 
'     <xs:attribute name="Room" type="xs:string" /> 
'     <xs:attribute name="StudentID" type="xs:int" 
'        use="prohibited" /> 
'    </xs:complexType> 
'    </xs:element> 
'   </xs:sequence> 
'   <xs:attribute name="ID" type="xs:int" /> 
'   </xs:complexType> 
'  </xs:element> 
'  </xs:choice> 
' </xs:complexType> 
' <xs:unique name="StudentID" msdata:PrimaryKey="true"> 
'  <xs:selector xpath=".//Student" /> 
'  <xs:field xpath="@ID" /> 
' </xs:unique> 
' <xs:keyref name="StudentClasses" refer="StudentID" 
'    msdata:IsNested="true"> 
'  <xs:selector xpath=".//Class" /> 
'  <xs:field xpath="@StudentID" /> 
' </xs:keyref> 
' </xs:element> 
'</xs:schema> 
+0

Si je comprends bien, DataSets sont plus lourds que même XmlDocument. –