// Xml informate xmlinfo do ##class(PD.XmlPerson).XMLSchema() write !,!,! set x = ##class(PD.XmlPerson).%OpenId(1) do x.XMLExport() write !,!,! do x.XMLExportToString(.exp) write exp, !,!,! quit ; // %XML.TextReader.ParseFile ParseXml(filename) set sc = ##class(%XML.TextReader).ParseFile(filename, .reader) if (sc = 1) { while (reader.Read()) { if ((reader.NodeType = "element") && (reader.Name = "person")) { do reader.MoveToAttributeName("ID") set pId = reader.Value do reader.MoveToElement() while '((reader.NodeType = "endelement") && (reader.Name = "person")) { do reader.Read() set whatever = reader.value // do ..DoSomething(whatever) } } } } else { quit sc } quit 1 ParseXml2(filename) set tab = $c(9) set crlf = $c(13,10) set sc = ##class(%XML.TextReader).ParseFile(filename, .reader) if (sc = 1) { set prevelem="" while (reader.Read()) { if (reader.NodeType = "element") { write reader.Name, ! } if ((reader.NodeType = "element") && (reader.HasAttributes)) { for i=1:1:reader.AttributeCount { do reader.MoverToAttributeIndex(i) write crlf_tab write reader.Name_tab_reader.Value } } if reader.NodeType = "chars" { write "contains data: "_reader.Value } } } else { quit sc } quit 1 // %XML.Writer test1 set writer = ##class(%XML.Writer).%New() set writer.Indent = 1 set x = ##class(PD.XmlPerson).%OpenId(1) do writer.RootObject(x, "MyXmlPerson", "http://tempuri.org",1) quit test2 set writer = ##class(%XML.Writer).%New() set writer.Indent = 1 set sc = writer.OutputToString() // if 'sc do write "error:", sc, ! // $System.OBJ.DisplayError() if 'sc do $System.OBJ.DisplayError() set x = ##class(PD.XmlPerson).%OpenId(1) do writer.RootObject(x, "MyXmlPerson", "http://tempuri.org") set xml = writer.GetXMLString() write xml quit test3 set writer = ##class(%XML.Writer).%New() set writer.Indent = 1 do writer.RootElement("Generic") do writer.Element("FirstElement") Do writer.WriteAttribute("myAttribute", "FirstAttribute") do writer.WriteChars("This is my generic xml doc") do writer.EndElement() do writer.EndRootElement() quit test4 set writer = ##class(%XML.Writer).%New() set writer.Indent = 1 do writer.AddNamespace("http://alex.org", "a1") set writer.ElementQualified = 1 set writer.AttributeQualified = 1 set x1 = ##class(PD.XmlPerson).%OpenId(1) set x2 = ##class(PD.XmlPerson).%OpenId(2) do writer.RootElement("PersonList") do writer.Object(x1, "Persoon") do writer.Object(x2, "Persoon") do writer.EndRootElement() quit // saxParser saxParser // 1. Create contenthandler class (derived from %XML.SAX.ContentHandler) // 2. Override de nodige methods (niet overdrijven, callbacks zijn kostelijk) // 3. geef deze contenthandler door aan een sax parser set ch = ##class(PD.SaxContentHandler).%New() set sc = ##class(%XML.SAX.Parser).ParseFile("c:\temp\file.xml", ch) if 'sc do $System.OBJ.DisplayError() quit // xpath testXpath // vanaf cache 5.1 quit // xslt testXslt // vanaf cache 5.1 quit