开始使用.NET中的XML

时间:2010-02-15 19:31:19

标签: .net xml

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

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

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

我从这里开始。这应该指向正确的方向。您需要做的大部分繁重工作都是将数据从DB中获取到您的Object实例中。

答案 2 :(得分:0)

我会在你的案例中使用数据集。像这个例子:

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>