开始在.NET中使用XML

开始在.NET中使用XML,.net,xml,.net,Xml,我得到了一组相关的xsd文件和一个包含xpath信息的电子表格。我需要创建一个符合模式文件的xml文件,并用数据库中的数据填充它。这将是我第一次深入研究.NET framework中的xml类 哪些课程能帮助我最快到达目的地 数据库中的数据很容易超过10000条记录,因此内存和IO性能也是一个问题。上次我检查时,执行XPath的最快方法是在XPathDocument实例上使用编译表达式 如果要在内存中创建并查询它,我建议改为使用XmlDocument,因为它不是只读的。如果要创建它并将其写入磁盘

我得到了一组相关的xsd文件和一个包含xpath信息的电子表格。我需要创建一个符合模式文件的xml文件,并用数据库中的数据填充它。这将是我第一次深入研究.NET framework中的xml类

哪些课程能帮助我最快到达目的地


数据库中的数据很容易超过10000条记录,因此内存和IO性能也是一个问题。

上次我检查时,执行XPath的最快方法是在XPathDocument实例上使用编译表达式

如果要在内存中创建并查询它,我建议改为使用XmlDocument,因为它不是只读的。如果要创建它并将其写入磁盘以供以后读取,只需使用XmlWriter目录。显然,无论如何,您都不想使用任何形式的字符串连接。


我从这里开始。这将为您指明正确的方向。您需要做的大部分繁重工作将是将数据库中的信息输入到您的对象实例中。

在您的情况下,我将使用数据集。像这个例子:

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>
导入系统
导入System.Xml
导入System.Xml.Schema
导入System.IO
导入系统。绘图
导入System.Drawing.Drawing2D
导入系统集合
导入系统数据
导入System.Windows.Forms
公共类主类
共享子主目录()
Dim DSStudentClass作为新数据集()
将tmpNode设置为XmlNode
'将架构加载到数据集中
DSStudentClasses.ReadXmlSchema(“StudentClasses.xsd”)
'将数据集加载到数据文档中
Dim XDocStudents作为新的XmlDataDocument(DSStudentClass)
'将数据加载到数据文档中
XDocStudents.Load(“Students.xml”)
Console.WriteLine(“数据集中的学生:”)
将行变暗为数据行
对于DSStudentClasses.Tables(“学生”).Rows中的每一行
WriteLine(“{0}:{1}”、行(“名称”)、行(“GPA”))
tmpNode=XDocStudents.GetElementFromRow(行)
控制台。WriteLine(_
锁组合(来自XML,而不是数据集):{0}_
tmpNode.SelectSingleNode(“LockerCombination”).InnerText)
将主题设置为数据行
对于Row.GetChildRows(“学生类”)中的每个主题
Console.WriteLine(“{0}”,主题(“标题”))
下一个
下一个
端接头
末级
'student.xml
'
'
'  
“王乔
'    30
'    2.95
'    10-12-35
'    
'    
'  
'
'student.xsd
'
'
'                
'              
'            
'            
'          
'        
'      
'    
'    
'      
'      
'    

如果我理解正确的话,数据集甚至比XmlDocument还要重。我选择了序列化。我正在使用ORM从数据库中检索数据。my domain模型和xml模式并不完全一致,因此我使用构建器模式来简化从我的域对象填充序列化数据对象的过程。