WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

MSXML

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

XML Sample to Create, Edit and Delete Elements


#DefineFunction ParseXML(xml)
   rdr = ObjectCreate("Msxml2.SAXXMLReader.3.0")
   wrt = ObjectCreate("Msxml2.MXXMLWriter.3.0")
   wrt.byteOrderMark = @FALSE
   wrt.omitXMLDeclaration = @TRUE
   wrt.indent = @TRUE
   ;'set the writer to the content handler
   rdr.contentHandler = wrt
   rdr.dtdHandler = wrt
   rdr.PutProperty("http://xml.org/sax/properties/lexical-handler", wrt)
   rdr.PutProperty("http://xml.org/sax/properties/declaration-handler", wrt)
   rdr.Parse(xml)
   newxml = wrt.output
   ObjectClose(wrt)
   ObjectClose(rdr)
   Return(newxml)
#EndFunction

xmlDoc = ObjectCreate("Msxml2.DOMDocument.3.0")
xmlDoc.async = @FALSE
xmlDoc.loadXML(`<Folders/>`)

err = xmlDoc.parseerror
If err.errorCode Then GoSub ShowParseErrors

;   get a list of folders...
FolderList = DirItemize("C:\*.*")
;   build a set of nodes for them...
For x = 1 To ItemCount(FolderList, @TAB)
   ThisFolder = ItemExtract(x, FolderList, @TAB)
   NewFolder = xmlDoc.createElement("Folder")
   NewFolder.text = ThisFolder
   xmlDoc.documentElement.appendChild(NewFolder)
Next

;   parse the XML so it looks pretty, reload it so
;   that it'll display nice...
xmlDoc.loadXML(ParseXML(xmlDoc.xml))

Message("Debug", xmlDoc.xml)

;   now let's do a simple edit, by turning all the
;   entries to UPPERCASE
FolderCollection = xmlDoc.selectNodes("//Folder")
ForEach Folder In FolderCollection
   Folder.text = StrUpper(Folder.text)
Next

Message("Debug", xmlDoc.xml)

;   now let's delete the even numbered Folder elements...
FolderCollection = xmlDoc.selectNodes("//Folder")
For x = 0 To FolderCollection.length-1
   CurrentElement = FolderCollection.item(x)
   If (x+1) mod 2 == 0
      ParentNode = CurrentElement.parentNode
      ParentNode.removeChild(CurrentElement)
   EndIf
Next

Message("Debug", xmlDoc.xml)

;   now let's delete all the folder nodes...
FolderCollection = xmlDoc.selectNodes("//Folder").removeAll
Message("Debug", xmlDoc.xml)

Exit

:ShowParseErrors
ec = err.errorCode
er = err.reason
el = err.line
elp = err.linepos
es  = err.srcText
Message("XML Parse Error", StrCat("Error Code: ", ec, @LF, "Reason: ", er, @LF, "Line: ", el, " ", "Column: ", elp, @LF, "Text: ", es))






Article ID:   W17346
File Created: 2009:01:16:09:23:54
Last Updated: 2009:01:16:09:23:54