• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            一個XML類創建子節點的問題

            Posted on 2009-10-22 08:04 S.l.e!ep.¢% 閱讀(486) 評論(0)  編輯 收藏 引用 所屬分類: HTML
            網上找了個VBS操作XML的類,代碼如下:
            Class clsXML
            'strFile must be full path to document, ie C:XMLXMLFile.XML
            'objDoc is the XML Object
            Private strFile, objDoc

            '*********************************************************************
            ' Initialization/Termination
            '*********************************************************************

            'Initialize Class Members
            Private Sub Class_Initialize()
            strFile = ""
            End Sub

            'Terminate and unload all created objects
            Private Sub Class_Terminate()
            Set objDoc = Nothing
            End Sub

            '*********************************************************************
            ' Properties
            '*********************************************************************

            'Set XML File and objDoc
            Public Property Let File(str)
            Set objDoc = CreateObject("Microsoft.XMLDOM")
            objDoc.async = False
            strFile = str
            objDoc.Load strFile
            End Property

            'Get XML File
            Public Property Get File()
            File = strFile
            End Property

            '*********************************************************************
            ' Functions
            '*********************************************************************

            'Create Blank XML File, set current obj File to newly created file
            Public Function createFile(strPath, strRoot)
            Dim objFSO, objTextFile
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            Set objTextFile = objFSO.CreateTextFile(strPath, True)
            objTextFile.WriteLine("<?xml version=""1.0"" encoding=""gb2312""?>")
            objTextFile.WriteLine("<" & strRoot & "/>")
            objTextFile.Close
            Me.File = strPath
            Set objTextFile = Nothing
            Set objFSO = Nothing
            End Function

            'Get XML Field(s) based on XPath input from root node
            Public Function getField(strXPath)
            Dim objNodeList, arrResponse(), i
            Set objNodeList = objDoc.documentElement.selectNodes(strXPath)
            ReDim arrResponse(objNodeList.length)
            For i = 0 To objNodeList.length - 1
            arrResponse(i) = objNodeList.Dir(i).Text
            Next
            getField = arrResponse
            End Function

            'Update existing node(s) based on XPath specs
            Public Function updateField(strXPath, strData)
            Dim objField
            For Each objField In objDoc.documentElement.selectNodes(strXPath)
            objField.DirName= strData
            Next
            objDoc.Save strFile
            Set objField = Nothing
            updateField = True
            End Function

            'Create node directly under root
            Public Function createRootChild(strNode)
            Dim objChild
            Set objChild = objDoc.createNode(1, strNode, "")
            objDoc.documentElement.appendChild(objChild)
            objDoc.Save strFile
            Set objChild = Nothing
            End Function

            'Create a child node under root node with attributes
            Public Function createRootNodeWAttr(strNode, attr, val)
            Dim objChild, objAttr
            Set objChild = objDoc.createNode(1, strNode, "")
            If IsArray(attr) And IsArray(val) Then
            If UBound(attr)-LBound(attr) <> UBound(val)-LBound(val) Then
            Exit Function
            Else
            Dim i
            For i = LBound(attr) To UBound(attr)
            Set objAttr = objDoc.createAttribute(attr(i))
            objChild.setAttribute attr(i), val(i)
            Next
            End If
            Else
            Set objAttr = objDoc.createAttribute(attr)
            objChild.setAttribute attr, val
            End If
            objDoc.documentElement.appendChild(objChild)
            objDoc.Save strFile
            Set objChild = Nothing
            End Function

            'Create a child node under the specified XPath Node
            Public Function createChildNode(strXPath, strNode)
            Dim objParent, objChild
            For Each objParent In objDoc.documentElement.selectNodes(strXPath)
            Set objChild = objDoc.createNode(1, strNode, "")
            objParent.appendChild(objChild)
            Next
            objDoc.Save strFile
            Set objParent = Nothing
            Set objChild = Nothing
            End Function

            'Create a child node(s) under the specified XPath Node with attributes
            Public Function createChildNodeWAttr(strXPath, strNode, attr, val)
            Dim objParent, objChild, objAttr
            For Each objParent In objDoc.documentElement.selectNodes(strXPath)
            Set objChild = objDoc.createNode(1, strNode, "")
            If IsArray(attr) And IsArray(val) Then
            If UBound(attr)-LBound(attr) <> UBound(val)-LBound(val) Then
            Exit Function
            Else
            Dim i
            For i = LBound(attr) To UBound(attr)
            Set objAttr = objDoc.createAttribute(attr(i))
            objChild.SetAttribute attr(i), val(i)
            Next
            End If
            Else
            Set objAttr = objDoc.createAttribute(attr)
            objChild.setAttribute attr, val
            End If
            objParent.appendChild(objChild)
            Next
            objDoc.Save strFile
            Set objParent = Nothing
            Set objChild = Nothing
            End Function

            'Delete the node specified by the XPath
            Public Function deleteNode(strXPath)
            Dim objOld
            For Each objOld In objDoc.documentElement.selectNodes(strXPath)
            objDoc.documentElement.removeChild objOld
            Next
            objDoc.Save strFile
            Set objOld = Nothing
            End Function
            End Class


            然后,我參照上面的類寫了個目錄島,代碼如下:

            Dim objXML, strPath, str

            Set objXML = New clsXML

            strPath = "c:Dir.xml"

            objXML.createFile strPath, "Dir_Island"
            '<!-- 創建3個根節點 -->
            objXML.createRootNodeWAttr "Dir", Array("DirID","DirName", "DirOwner", "DirDescption","CreateTime"), _
            Array(1,"Dir1", "Lili", "a",now)
            objXML.createRootNodeWAttr "Dir", Array("DirID","DirName", "DirOwner", "DirDescption","CreateTime"), _
            Array(2,"Dir2", "Jony", "b",now)
            objXML.createRootNodeWAttr "Dir", Array("DirID","DirName", "DirOwner", "DirDescption","CreateTime"), _
            Array(3,"Dir3", "Self", "c",now)
            '<!-- 在第一個根節點中創建1個子節點可以成功 -->
            objXML.createChildNodeWAttr "Dir[@DirName='Dir1']", "Dir", _
            Array("DirID","DirName", "DirOwner", "DirDescption","CreateTime"), _
            Array(4,"Sub_Dir1", "Jony1", "bb",now)
            '<!-- 在剛才創建的子節點中再創建1個子節點怎么就不行? -->
            objXML.createChildNodeWAttr "Dir[@DirName='Sub_Dir1']", "Dir", _
            Array("DirID","DirName", "DirOwner", "DirDescption","CreateTime"), _
            Array(5,"Sub_Sub_Dir1", "Jony2", "bbb",now)

            Set objXML = Nothing

            '程序運行完后生成的XML文件如下:
            ' <?xml version="1.0" encoding="gb2312" ?>
            '- <Dir_Island>
            ' - <Dir DirID="1" DirName="Dir1" DirOwner="Lili" DirDescption="a" CreateTime="3/30/2004 9:03:11 AM">
            ' <Dir DirID="4" DirName="Sub_Dir1" DirOwner="Jony1" DirDescption="bb" CreateTime="3/30/2004 9:03:11 AM" />
            ' </Dir>
            ' <Dir DirID="2" DirName="Dir2" DirOwner="Jony" DirDescption="b" CreateTime="3/30/2004 9:03:11 AM" />
            ' <Dir DirID="3" DirName="Dir3" DirOwner="Self" DirDescption="c" CreateTime="3/30/2004 9:03:11 AM" />
            ' </Dir_Island>

            '為什么不是這樣的呢?

            ' <?xml version="1.0" encoding="gb2312" ?>
            '- <Dir_Island>
            ' - <Dir DirID="1" DirName="Dir1" DirOwner="Lili" DirDescption="a" CreateTime="3/30/2004 9:03:11 AM">
            ' <Dir DirID="4" DirName="Sub_Dir1" DirOwner="Jony1" DirDescption="bb" CreateTime="3/30/2004 9:03:11 AM">
            ' <Dir DirID="5" DirName="Sub_Sub_Dir1" DirOwner="Jony2" DirDescption="bbb" CreateTime="3/30/2004 9:03:11 AM" />
            ' </Dir>
            ' </Dir>
            ' <Dir DirID="2" DirName="Dir2" DirOwner="Jony" DirDescption="b" CreateTime="3/30/2004 9:03:11 AM" />
            ' <Dir DirID="3" DirName="Dir3" DirOwner="Self" DirDescption="c" CreateTime="3/30/2004 9:03:11 AM" />
            ' </Dir_Island>

            以上代碼需要測試的話請各位連同類和代碼COPY到本地新建一個VBS文檔運行,運行結果在你本機C:Dir.xml中顯示。
            請教各位XML高手啊。
            久久精品无码免费不卡| 国产毛片欧美毛片久久久| 麻豆亚洲AV永久无码精品久久| 久久精品免费全国观看国产| 久久久亚洲欧洲日产国码是AV| 国产三级久久久精品麻豆三级| 香蕉久久一区二区不卡无毒影院| 久久WWW免费人成—看片| 国产精品久久久久久久app| 国产综合久久久久久鬼色| 国产激情久久久久影院老熟女免费| 亚洲欧洲久久av| 人妻无码久久一区二区三区免费 | 久久狠狠爱亚洲综合影院| 久久精品无码专区免费东京热| 精品国产青草久久久久福利| 久久久久久亚洲Av无码精品专口| 99久久夜色精品国产网站| 亚洲精品久久久www| 国产精品久久影院| 国内高清久久久久久| 久久精品成人免费观看97| aaa级精品久久久国产片| 国产99久久久国产精品小说| 国产精品永久久久久久久久久| 一本久久a久久精品vr综合| 亚洲伊人久久成综合人影院 | 伊人久久一区二区三区无码| 久久精品九九亚洲精品天堂| 亚洲AV成人无码久久精品老人| 亚洲欧洲久久av| 伊人伊成久久人综合网777| 91精品国产高清久久久久久国产嫩草| 亚洲精品乱码久久久久久蜜桃不卡 | 免费精品久久久久久中文字幕| 热久久最新网站获取| 精品久久久久中文字幕一区| 国产成人久久精品麻豆一区| 国产综合免费精品久久久| 国内精品免费久久影院| 久久久久久亚洲精品不卡|