INITIALIZE-DOCUMENT-TYPE( ) methodCreates a new XML document, initializes the document based on the referenced DTD, and creates its root node.
Return type:
Applies to:
INITIALIZE-DOCUMENT-TYPE ( namespace-uri , root-node-name , public-id ,system-id )A character expression representing the namespace Uniform Resource Identifier (URI) you want associated with the root node of the XML document. The namespace-uri must be unique and persistent.A character expression representing the name of the root node as defined in the XML document. If you are using namespaces and you want to associate a prefix with the namespace, you must qualify this node name with the namespace-uri and a colon character prefix (for example, namespace-uri:root-node-name). You must explicitly set the xmlns attribute on the root node.An optional character expression representing the public ID of the DTD. Currently, there is no way to retrieve a DTD based on a public ID.A required character expression representing the system ID of the DTD. This contains the path to the DTD which is either a file system path or an HTTP URL. The ABL parser uses this information to retrieve the DTD when parsing the document.The following example initializes an X-DOCUMENT with a DTD reference and adds the proper namespace declaration, if the namespace URI is not empty:
DEFINE INPUT PARAMETER namespaceURI AS CHARACTER NO-UNDO.DEFINE INPUT PARAMETER rootNodeName AS CHARACTER NO-UNDO.DEFINE INPUT PARAMETER publicId AS CHARACTER NO-UNDO.DEFINE INPUT PARAMETER systemId AS CHARACTER NO-UNDO.DEFINE OUTPUT PARAMETER hDocument AS HANDLE NO-UNDO.DEFINE VARIABLE hNsDecl AS HANDLE NO-UNDO.DEFINE VARIABLE hRootNode AS HANDLE NO-UNDO.DEFINE VARIABLE errStat AS LOGICAL NO-UNDO.DEFINE VARIABLE found AS INTEGER NO-UNDO. /* Create X-DOCUMENT and intialize it. */CREATE X-DOCUMENT hDocument.errStat = hDocument:INITIALIZE-DOCUMENT-TYPE(namespaceURI, rootNodeName, publicId, systemId).IF NOT errStat THEN DO:DELETE OBJECT hDocument.LEAVE.END./* If using namespaces, create X-NODEREF for namespace declaration. */IF LENGTH(namespaceURI) > 0 THEN DO:CREATE X-NODEREF hNsDecl.CREATE X-NODEREF hRootNode./* Look for a colonized name in rootNodeName. */found = INDEX(rootNodeName, ":").IF found > 0 THEN DO:/* Namespace declarations are special kinds of attributes that belong inthe http://www.w3.org/2000/xmlns/ namespace.*/errStat = hDocument:CREATE-NODE-NAMESPACE(hNsDecl,"http://www.w3.org/2000/xmlns/", "xmlns:" +SUBSTRING(rootNodeName, 1, found - 1), "attribute").END.ELSE DO:/* Use the default namespace, which does not need a namespace declarationprefix, assign it to the http://www.w3.org/2000/xmlns/ namespace.*/errStat = hDocument:CREATE-NODE-NAMESPACE(hNsDecl,"http://www.w3.org/2000/xmlns/", "xmlns", "attribute").END.IF NOT errStat THEN LEAVE./* Set the value of the namespace attribute to the namespace URI. */hNsDecl:NODE-VALUE = namespaceURI./* Retrieve the root node and add the namespace declaration to it. */errStat = hDocument:GET-DOCUMENT-ELEMENT(hRootNode).IF NOT errStat THEN LEAVE.errStat = hRootNode:SET-ATTRIBUTE-NODE(hNsDecl).END./* Free up the temporary X-NODEREFS. */IF VALID-HANDLE(hNsDecl) THENDELETE OBJECT hNsDecl.IF VALID-HANDLE(hRootNode) THENDELETE OBJECT hRootNode./* If an error occurred, free up the X-DOCUMENT. */IF NOT errStat THENDELETE OBJECT hDocument.
© 2012 Progress Software Corporation and/or its subsidiaries or affiliates. |