>lcXmlFile = FULLPATH("...") > >loXmlDoc = CreateObject("Msxml2.DOMDocument.3.0") && MSXML 3.0, used by Xmltocursor() >*loXmlDoc = CreateObject("Msxml2.DOMDocument.4.0") && MSXML 4.0, used by XmlAdaptor > >* Turn some switches off >loXmlDoc.validateOnParse = .F. >loXmlDoc.async = .F. >loXmlDoc.resolveExternals = .F. >* and On >loXmlDom.preserveWhiteSpace = .T. > >* Load the xml document >= loXmlDoc.Load(lcXmlFile) > >* Check for errors >If loXmlDoc.parseError.errorCode <> 0 > ?loXmlDoc.parseError.reason > RETURN .F. >ENDIF > >* Set SelectionLanguage to XPath >= loXmlDoc.SetProperty("SelectionLanguage", "XPath") >* Set namespace. 'ns' is an arbitrary name >= loXmlDoc.SetProperty("SelectionNamespaces", "xmlns:ns='" + loXmlDoc.namespaces(0)+"'") > >* Read and set some items >? ChangeItem(loXmlDoc, "address", "Some New Address") >? ChangeItem(loXmlDoc, "contact", "New Name") > >* Save XML back >loXmlDoc.Save(lcXmlFile) > >loXmlDoc = NULL >RETURN > >FUNCTION ChangeItem(toXmlDom, tcAttributeName, tvNewValue) >LOCAL loItem, llOK >? "Item:", tcAttributeName >loItem = toXmlDom.selectSingleNode("//ns:field[@name='" + tcAttributeName + "']") >llOK = NOT ISNULL(loItem) >IF llOK > ? "Before:", loItem.nodeTypedValue > loItem.nodeTypedValue = tvNewValue > ? "After:", loItem.nodeTypedValue > loItem = NULL >ENDIF > >RETURN llOK >ENDFUNC >>