代码之家  ›  专栏  ›  技术社区  ›  Kenneth Cochran

开始在.NET中使用XML

  •  0
  • Kenneth Cochran  · 技术社区  · 16 年前

    我得到了一个相关xsd文件的集合和一个包含xpath信息的电子表格。我需要创建一个符合模式文件的xml文件,并用数据库中的数据填充它。

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

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

    3 回复  |  直到 16 年前
        2
  •  0
  •   Nelson Miranda    16 年前

    我会在你的情况下使用数据集。比如这个例子:

    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>
    
        3
  •  0
  •   Steven Sudit    16 年前

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