急盼!请给个代码,感激不尽!

解决方案 »

  1.   

    从XML文件中读取数据,结果放到一个复杂的自定义结构体当中。可以给你参考一下。XML文档格式类似下面:
      <?xml version="1.0" encoding="GB2312" ?> 
    - <Pages Count="2">
    - <Page id="0" PageAddress="35.38.3.0" AreasCount="1">
    - <UserArea Name="sign" LinesCount="1">
    - <Line id="0" CharsCount="2">
    - <Char id="0" Content="1" PossibleCharsCount="2" StrokesCount="1" Left="1" Top="1" Height="49" Width="49">
      <PossibleChars>一,7,</PossibleChars> 
    - <PenStroke id="0" Color="0" LineWidth="1">
      <X>10,20,30,40,</X> 
      <Y>20,20,20,20,</Y> 
      <DeltaTime>0,100,100,100,</DeltaTime> 
      <Force>100,100,100,100,</Force> 
      </PenStroke>
      </Char>
    - <Char id="1" Content="2" PossibleCharsCount="3" StrokesCount="2" Left="51" Top="1" Height="49" Width="49">
      <PossibleChars>十,t,4,</PossibleChars> 
    - <PenStroke id="0" Color="0" LineWidth="1">
      <X>60,70,80,90,</X> 
      <Y>20,20,20,20,</Y> 
      <DeltaTime>0,100,100,100,</DeltaTime> 
      <Force>100,100,100,100,</Force> 
      </PenStroke>
    - <PenStroke id="1" Color="0" LineWidth="1">
      <X>70,70,70,70,</X> 
      <Y>10,20,30,40,</Y> 
      <DeltaTime>0,50,50,50,</DeltaTime> 
      <Force>100,100,100,100,</Force> 
      </PenStroke>
      </Char>
      </Line>
      </UserArea>
      </Page>
    - <Page id="1" PageAddress="35.38.3.1" AreasCount="1">
    - <UserArea Name="sign" LinesCount="1">
    - <Line id="0" CharsCount="2">
    - <Char id="0" Content="1" PossibleCharsCount="2" StrokesCount="1" Left="1" Top="1" Height="49" Width="49">
      <PossibleChars>一,7,</PossibleChars> 
    - <PenStroke id="0" Color="0" LineWidth="1">
      <X>10,20,30,40,</X> 
      <Y>20,20,20,20,</Y> 
      <DeltaTime>0,100,100,100,</DeltaTime> 
      <Force>100,100,100,100,</Force> 
      </PenStroke>
      </Char>
    - <Char id="1" Content="2" PossibleCharsCount="3" StrokesCount="2" Left="51" Top="1" Height="49" Width="49">
      <PossibleChars>十,t,4,</PossibleChars> 
    - <PenStroke id="0" Color="0" LineWidth="1">
      <X>60,70,80,90,</X> 
      <Y>20,20,20,20,</Y> 
      <DeltaTime>0,100,100,100,</DeltaTime> 
      <Force>100,100,100,100,</Force> 
      </PenStroke>
    - <PenStroke id="1" Color="0" LineWidth="1">
      <X>70,70,70,70,</X> 
      <Y>10,20,30,40,</Y> 
      <DeltaTime>0,50,50,50,</DeltaTime> 
      <Force>100,100,100,100,</Force> 
      </PenStroke>
      </Char>
      </Line>
      </UserArea>
      </Page>
      </Pages>
      

  2.   

    代码如下:
    '*********************以下定义一些自己的数据类型,用于信息存放*********************
    '定义笔划
    Public Type UsysStroke
        ID As Long          '笔划编号
        Color As Long       '笔划颜色
        LineWidth As Long   '笔划宽度
        x() As Single       '横坐标数组
        y() As Single       '纵坐标数组
        Force() As Byte     '压力数组
        DeltaTime() As Long '时间间隔数组
    End Type
    '定义字符
    Public Type UsysChar
        ID As Long                 '字符编号
        Content As String          '识别结果
        PossibleCharsCount As Long '识别后返回相近字符的个数
        StrokesCount As Long       '该字符中笔划的数目
        Left As Single             '字符笔划集合的左边界
        Top As Single              '字符笔划集合的上边界
        Height As Single           '字符笔划集合的高度
        Width As Single            '字符笔划集合的宽度
        PossibleChars() As String  '返回的相近字符数组
        PenStroke() As UsysStroke  '笔划数组
    End Type
    '定义行
    Public Type UsysLine
        ID As Long         '行编号
        CharsCount As Long '行中字的个数
        Char() As UsysChar '行中所包含的字数组
    End Type
    '定义Area
    Public Type UsysArea
        Name As String      'UserArea名称
        LinesCount As Long  'Area中书写的行数
        Uline() As UsysLine '行数组**注意由于关键字的影响,此处的命名和XML文件中不同
    End Type
    '定义Page页
    Public Type UsysPage
        ID As Long '页编号
        PageAddress As String  '页地址
        AreasCount As Long     '页中包含的UserArea数目
        UserArea() As UsysArea 'Area数组
    End Type
    '定义Request
    Public Type UsysRequest
        Count As Long      '所包含页的数目
        Page() As UsysPage '页数组
    End TypePublic Function ReadXML(FileName As String) As UsysRequest
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '本函数读取用于校验的XML文档,并将其中的数据存储成自己定义的数据结构UsysRequest
    '参数FileName为校验组件输入XML文档的路径及文件名
    '
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '下面定义一些用于循环控制的整型变量
        Dim i As Long '用于控制循环
        Dim j As Long '用于控制循环
        Dim h As Long '用于控制循环
        Dim l As Long '用于控制循环
        Dim m As Long '用于控制循环
        i = 0 '赋初值
        j = 0 '赋初值
        h = 0 '赋初值
        l = 0 '赋初值
        m = 0 '赋初值
        
        '下面定义一些用于操作XML元素的变量
        Dim objXML As New DOMDocument       '声明并实例化
        Dim PagesNode As IXMLDOMElement     '根元素
        Dim PageNode As IXMLDOMElement      'Page元素
        Dim UserAreaNode As IXMLDOMElement  'UserArea元素
        Dim ULineNode As IXMLDOMElement     'Line元素,注意名称和XML文档中不同
        Dim CharNode As IXMLDOMElement      'Char元素
        Dim PenStrokeNode As IXMLDOMElement 'PenStroke元素
        
        '以下是用层层嵌套的循环读取出XML文档中的内容,并转存成UsysRequest结构
        objXML.Load FileName '打开XML文档
        If objXML.documentElement Is Nothing Then '如果指定的XML文件不存在
            MsgBox " 指定的XML文件不存在!", vbOKOnly, "提示:"
            Exit Function
        End If
        Set PagesNode = objXML.documentElement '获取根元素
        Dim Request As UsysRequest '自己定义的UsysRequest结构
        Request.Count = CLng(PagesNode.getAttribute("Count"))
        Dim Page() As UsysPage
        For Each PageNode In PagesNode.selectNodes("./Page")
            ReDim Preserve Page(i)
            Page(i).ID = CLng(PageNode.getAttribute("id"))
            Page(i).PageAddress = Trim(PageNode.getAttribute("PageAddress"))
            Page(i).AreasCount = CLng(PageNode.getAttribute("AreasCount"))
            Dim UserArea() As UsysArea
            j = 0 '注意在下一个Page的循环过程前归零
            ReDim UserArea(j) '清空
            For Each UserAreaNode In PageNode.selectNodes("./UserArea")
                ReDim Preserve UserArea(j)
                UserArea(j).Name = Trim(UserAreaNode.getAttribute("Name"))
                UserArea(j).LinesCount = CLng(UserAreaNode.getAttribute("LinesCount"))
                Dim Uline() As UsysLine
                h = 0 '注意在下一个Area的循环过程前归零
                ReDim Uline(h) '清空
                For Each ULineNode In UserAreaNode.selectNodes("./Line")
                    ReDim Preserve Uline(h)
                    Uline(h).ID = CLng(ULineNode.getAttribute("id"))
                    Uline(h).CharsCount = CLng(ULineNode.getAttribute("CharsCount"))
                    Dim Char() As UsysChar
                    l = 0 '注意在下一个行的循环过程前归零
                    ReDim Char(l) '清空
                    For Each CharNode In ULineNode.selectNodes("./Char")
                        ReDim Preserve Char(l)
                        Char(l).ID = CLng(CharNode.getAttribute("id"))
                        Char(l).Left = CSng(CharNode.getAttribute("Left"))
                        Char(l).Top = CSng(CharNode.getAttribute("Top"))
                        Char(l).Height = CSng(CharNode.getAttribute("Height"))
                        Char(l).Width = CSng(CharNode.getAttribute("Width"))
                        Char(l).Content = Trim(CharNode.getAttribute("Content"))
                        Char(l).PossibleCharsCount = CLng(CharNode.getAttribute("PossibleCharsCount"))
                        Dim txtChars As String
                        txtChars = CharNode.selectSingleNode("./PossibleChars").Text
                        Char(l).PossibleChars = GetStr(txtChars)
                        Char(l).StrokesCount = CLng(CharNode.getAttribute("StrokesCount"))
                        Dim PenStroke() As UsysStroke
                        m = 0 '注意在下一个字的循环过程前归零
                        ReDim PenStroke(m) '清空
                        For Each PenStrokeNode In CharNode.selectNodes("./PenStroke")
                            ReDim Preserve PenStroke(m)
                                PenStroke(m).ID = CLng(PenStrokeNode.getAttribute("id"))
                                PenStroke(m).Color = CLng(PenStrokeNode.getAttribute("Color"))
                                PenStroke(m).LineWidth = CLng(PenStrokeNode.getAttribute("LineWidth"))
                                Dim txt As String
                                txt = PenStrokeNode.selectSingleNode("./X").Text
                                PenStroke(m).x = GetSingle(txt)
                                txt = PenStrokeNode.selectSingleNode("./Y").Text
                                PenStroke(m).y = GetSingle(txt)
                                txt = PenStrokeNode.selectSingleNode("./Force").Text
                                PenStroke(m).Force = GetByte(txt)
                                txt = PenStrokeNode.selectSingleNode("./DeltaTime").Text
                                PenStroke(m).DeltaTime = GetLong(txt)
                            m = m + 1
                        Next
                        Char(l).PenStroke = PenStroke()
                        l = l + 1
                    Next
                    Uline(h).Char = Char()
                    h = h + 1
                Next
                UserArea(j).Uline = Uline()
                j = j + 1
            Next
            Page(i).UserArea = UserArea()
            i = i + 1
        Next
        Request.Page = Page()    '释放内存
        Set PenStrokeNode = Nothing
        Set CharNode = Nothing
        Set ULineNode = Nothing
        Set UserAreaNode = Nothing
        Set PageNode = Nothing
        Set PagesNode = Nothing
        Set objXML = Nothing
        
        ReadXML = Request '返回值
    End Function有一些用于数据转换的函数没有贴出代码,不过整个流程框架就是这个样子了。
      

  3.   

    http://www.yesky.com/20021016/1635180.shtml