ANSC_HANDLE AnscCreateXmlDomNode ( ANSC_HANDLE hOwnerContext ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_XML_DOM_PARSER_OBJECT pXmlParser = NULL; return AnscXmlDomNodeCreate(hOwnerContext); }
ANSC_HANDLE AnscXmlDomNodeAddChildByName ( ANSC_HANDLE hThisObject, char* name ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_XML_DOM_NODE_OBJECT pXmlNode = (PANSC_XML_DOM_NODE_OBJECT)hThisObject; PANSC_XML_DOM_NODE_OBJECT pChildNode = NULL; BOOL bUnique = FALSE; if ( bUnique ) { pChildNode = AnscXmlDomNodeGetChildByName((ANSC_HANDLE)pXmlNode, name); } else { pChildNode = NULL; } if ( pChildNode ) { return (ANSC_HANDLE)pChildNode; } else { pChildNode = (PANSC_XML_DOM_NODE_OBJECT)AnscXmlDomNodeCreate(pXmlNode->hOwnerContext); if ( !pChildNode ) { return (ANSC_HANDLE)NULL; } else { AnscXmlDomNodeSetParentNode((ANSC_HANDLE)pChildNode, (ANSC_HANDLE)pXmlNode); AnscXmlDomNodeSetName ((ANSC_HANDLE)pChildNode, name); } AnscXmlDomNodeAddChild((ANSC_HANDLE)pXmlNode, (ANSC_HANDLE)pChildNode); AnscXmlDomNodeSetLevel((ANSC_HANDLE)pChildNode, AnscXmlDomNodeGetLevel((ANSC_HANDLE)pXmlNode) + 1); } return (ANSC_HANDLE)pChildNode; }
ANSC_HANDLE AnscXmlDomNodeCopy ( ANSC_HANDLE hNode ) { CHAR pNodeName[128] = { 0 }; ULONG uNodeLength = 128; PANSC_XML_DOM_NODE_OBJECT pOld = (PANSC_XML_DOM_NODE_OBJECT)hNode; PANSC_XML_DOM_NODE_OBJECT pCopy = NULL; PANSC_XML_ATTRIBUTE pFirst = NULL; PANSC_XML_ATTRIBUTE pNewAttribute = NULL; PANSC_XML_DOM_NODE_OBJECT pFirstNode = NULL; ANSC_HANDLE hCopy, hChild; if( hNode == NULL) { return (ANSC_HANDLE)NULL; } /* create a new node with the node name */ pCopy = (PANSC_XML_DOM_NODE_OBJECT)AnscXmlDomNodeCreate(pOld->hOwnerContext); if( pCopy == NULL) { return (ANSC_HANDLE)NULL; } hCopy = (ANSC_HANDLE)pCopy; AnscXmlDomNodeSetName(hCopy, AnscXmlDomNodeGetName(hNode)); /* copy all the attributes */ pFirst = (PANSC_XML_ATTRIBUTE)AnscXmlDomNodeGetFirstAttr(hNode); while ( pFirst != NULL) { /* * generate a new tree Attribute */ pNewAttribute = (PANSC_XML_ATTRIBUTE)AnscAllocateMemory(sizeof(ANSC_XML_ATTRIBUTE)); if ( !pNewAttribute ) { AnscXmlDomNodeRemove( hCopy ); ANSC_XML_TRACE("Failed to allocate attribute structure for in ALXMLCopyHandle\n"); return (ANSC_HANDLE)NULL; } AnscZeroMemory(pNewAttribute, sizeof(ANSC_XML_ATTRIBUTE)); pNewAttribute->hParentNode = (ANSC_HANDLE)pCopy; pNewAttribute->hXMLContext = pCopy->hXMLContext; pNewAttribute->DataSize = pFirst->DataSize; pNewAttribute->StringData = AnscAllocateMemory( pFirst->DataSize + 1); if( pNewAttribute->StringData != NULL) { AnscZeroMemory(pNewAttribute->StringData,pFirst->DataSize + 1); /* copy the attribute name and value */ AnscCopyString(pNewAttribute->Name, pFirst->Name); if( pFirst->StringData != NULL) { AnscCopyMemory(pNewAttribute->StringData, pFirst->StringData, pNewAttribute->DataSize); } /* add the attribute to the list */ AnscAcquireXmlLock(&pCopy->AttributesListLock); AnscQueuePushEntry(&pCopy->AttributesList, &pNewAttribute->Linkage); AnscReleaseXmlLock(&pCopy->AttributesListLock); } else { AnscFreeMemory(pNewAttribute); } /* goto next attribute */ pFirst = (PANSC_XML_ATTRIBUTE)AnscXmlDomNodeGetNextAttr(hNode, (ANSC_HANDLE)pFirst); } /* copy the text value */ if( pOld->DataSize > 0 && pOld->StringData != NULL) { pCopy->DataSize = pOld->DataSize; pCopy->StringData = AnscAllocateMemory( pOld->DataSize + 1); if( pCopy->StringData != NULL) { AnscZeroMemory(pCopy->StringData, pOld->DataSize + 1); AnscCopyMemory(pCopy->StringData, pOld->StringData, pOld->DataSize); } else { pCopy->DataSize = 0; } } /* create and copy all the child node */ pFirstNode = AnscXmlDomNodeGetHeadChild(hNode); while( pFirstNode ) { hChild = AnscXmlDomNodeCopy((ANSC_HANDLE)pFirstNode); if (hChild) AnscXmlDomNodeAddChild(hCopy, hChild); /* goto the next node */ pFirstNode = AnscXmlDomNodeGetNextChild(hNode, (ANSC_HANDLE)pFirstNode); } return hCopy; }