Начало работы с XML в .NET - PullRequest
0 голосов
/ 15 февраля 2010

Мне дали коллекцию связанных xsd-файлов и электронную таблицу с информацией о xpath. Мне нужно создать XML-файл, соответствующий файлам схемы, и заполнить его данными из базы данных. Это будет мой первый раз, когда я углублюсь в классы XML в .NET Framework.

Какие занятия помогут мне быстрее добраться до пункта назначения?

Данные из базы данных могут легко превышать 10000 записей, поэтому проблема с памятью и вводом-выводом также является проблемой.

Ответы [ 3 ]

0 голосов
/ 15 февраля 2010

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

Я бы начал здесь. Это должно указать вам в правильном направлении. Большую часть тяжелой работы, которую вам придется выполнить, будет выводить информацию из БД в ваш экземпляр Object.

0 голосов
/ 15 февраля 2010

Я бы использовал набор данных в вашем случае. Как этот пример:

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 голосов
/ 15 февраля 2010

В последний раз я проверял, что самым быстрым способом выполнения XPath было использование скомпилированного выражения в экземпляре XPathDocument.

Если вы собираетесь создать его в памяти и запросить его, я предлагаю вместо этого XmlDocument, поскольку он не только для чтения. Если вы собираетесь создать его и записать на диск для дальнейшего чтения, просто используйте каталог XmlWriter. Очевидно, что вы не хотите использовать какую-либо форму конкатенации строк, независимо от этого.

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