⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 node.c

📁 Upnp开发包文件
💻 C
📖 第 1 页 / 共 4 页
字号:
*       External function.**=================================================================*/IXML_Node *ixmlNode_getLastChild( IN IXML_Node * nodeptr ){    IXML_Node *prev,     *next;    if( nodeptr != NULL ) {        prev = nodeptr;        next = nodeptr->firstChild;        while( next != NULL ) {            prev = next;            next = next->nextSibling;        }        return prev;    } else {        return NULL;    }}/*================================================================*   ixmlNode_getPreviousSibling*       returns the previous sibling node of nodeptr.*       External function.**=================================================================*/IXML_Node *ixmlNode_getPreviousSibling( IN IXML_Node * nodeptr ){    if( nodeptr != NULL ) {        return nodeptr->prevSibling;    } else {        return NULL;    }}/*================================================================*   ixmlNode_getNextSibling*       Returns the next sibling node.*       External function.**=================================================================*/IXML_Node *ixmlNode_getNextSibling( IN IXML_Node * nodeptr ){    if( nodeptr != NULL ) {        return nodeptr->nextSibling;    } else {        return NULL;    }}/*================================================================*   ixmlNode_getOwnerDocument*       Returns the owner document node.*       External function.**=================================================================*/IXML_Document *ixmlNode_getOwnerDocument( IN IXML_Node * nodeptr ){    if( nodeptr != NULL ) {        return ( IXML_Document * ) nodeptr->ownerDocument;    } else {        return NULL;    }}/*================================================================*   ixmlNode_isAncestor*       check if ancestorNode is ancestor of toFind *       Internal to parser only.*   Returns:*       TRUE or FALSE**=================================================================*/BOOLixmlNode_isAncestor( IXML_Node * ancestorNode,                     IXML_Node * toFind ){    BOOL found = FALSE;    if( ( ancestorNode != NULL ) && ( toFind != NULL ) ) {        if( toFind->parentNode == ancestorNode ) {            return TRUE;        } else {            found =                ixmlNode_isAncestor( ancestorNode->firstChild, toFind );            if( found == FALSE ) {                found =                    ixmlNode_isAncestor( ancestorNode->nextSibling,                                         toFind );            }        }    }    return found;}/*================================================================*   ixmlNode_isParent*       Check whether toFind is a children of nodeptr.*       Internal to parser only.*   Return:*       TRUE or FALSE       **=================================================================*/BOOLixmlNode_isParent( IXML_Node * nodeptr,                   IXML_Node * toFind ){    BOOL found = FALSE;    assert( nodeptr != NULL && toFind != NULL );    if( toFind->parentNode == nodeptr ) {        found = TRUE;    }    return found;}/*================================================================*   ixmlNode_allowChildren*       Check to see whether nodeptr allows children of type newChild.    *       Internal to parser only.*   Returns:      *       TRUE, if nodeptr can have newChild as children*       FALSE,if nodeptr cannot have newChild as children**=================================================================*/BOOLixmlNode_allowChildren( IXML_Node * nodeptr,                        IXML_Node * newChild ){    assert( nodeptr != NULL && newChild != NULL );    switch ( nodeptr->nodeType ) {        case eATTRIBUTE_NODE:        case eTEXT_NODE:        case eCDATA_SECTION_NODE:            return FALSE;            break;        case eELEMENT_NODE:            if( ( newChild->nodeType == eATTRIBUTE_NODE ) ||                ( newChild->nodeType == eDOCUMENT_NODE ) ) {                return FALSE;            }            break;        case eDOCUMENT_NODE:            if( newChild->nodeType != eELEMENT_NODE ) {                return FALSE;            }        default:            break;    }    return TRUE;}/*================================================================*   ixmlNode_compare*       Compare two nodes to see whether they are the same node.*       Parent, sibling and children node are ignored.*       Internal to parser only.*   Returns:*       TRUE, the two nodes are the same.*       FALSE, the two nodes are not the same.**=================================================================*/BOOLixmlNode_compare( IXML_Node * srcNode,                  IXML_Node * destNode ){    assert( srcNode != NULL && destNode != NULL );    if( ( srcNode == destNode ) ||        ( strcmp( srcNode->nodeName, destNode->nodeName ) == 0 &&          strcmp( srcNode->nodeValue, destNode->nodeValue ) == 0 &&          ( srcNode->nodeType == destNode->nodeType ) &&          strcmp( srcNode->namespaceURI, destNode->namespaceURI ) == 0 &&          strcmp( srcNode->prefix, destNode->prefix ) == 0 &&          strcmp( srcNode->localName, destNode->localName ) == 0 ) ) {        return TRUE;    } else {        return FALSE;    }}/*================================================================*   ixmlNode_insertBefore*       Inserts the node newChild before the existing child node refChild.*       If refChild is null, insert newChild at the end of the list of*       children. If the newChild is already in the tree, it is first*       removed.   *       External function.*   Parameters:*       newChild: the node to insert.*   Returns:**=================================================================*/intixmlNode_insertBefore( IN IXML_Node * nodeptr,                       IN IXML_Node * newChild,                       IN IXML_Node * refChild ){    int ret = IXML_SUCCESS;    if( ( nodeptr == NULL ) || ( newChild == NULL ) ) {        return IXML_INVALID_PARAMETER;    }    // whether nodeptr allow children of the type of newChild     if( ixmlNode_allowChildren( nodeptr, newChild ) == FALSE ) {        return IXML_HIERARCHY_REQUEST_ERR;    }    // or if newChild is one of nodeptr's ancestors    if( ixmlNode_isAncestor( newChild, nodeptr ) == TRUE ) {        return IXML_HIERARCHY_REQUEST_ERR;    }    // if newChild was created from a different document     if( nodeptr->ownerDocument != newChild->ownerDocument ) {        return IXML_WRONG_DOCUMENT_ERR;    }    // if refChild is not a child of nodeptr    if( ixmlNode_isParent( nodeptr, refChild ) == FALSE ) {        return IXML_NOT_FOUND_ERR;    }    if( refChild != NULL ) {        if( ixmlNode_isParent( nodeptr, newChild ) == TRUE ) {            ixmlNode_removeChild( nodeptr, newChild, NULL );            newChild->nextSibling = NULL;            newChild->prevSibling = NULL;        }        newChild->nextSibling = refChild;        if( refChild->prevSibling != NULL ) {            ( refChild->prevSibling )->nextSibling = newChild;            newChild->prevSibling = refChild->prevSibling;        }        refChild->prevSibling = newChild;        if( newChild->prevSibling == NULL ) {            nodeptr->firstChild = newChild;        }        newChild->parentNode = nodeptr;    } else {        ret = ixmlNode_appendChild( nodeptr, newChild );    }    return ret;}/*================================================================*   ixmlNode_replaceChild*       Replaces the child node oldChild with newChild in the list of children,*       and returns the oldChild node.*       External function.*   Parameters:*       newChild:   the new node to put in the child list.*       oldChild:   the node being replaced in the list.*       returnNode: the node replaced.*   Return Value:*       IXML_SUCCESS*       IXML_INVALID_PARAMETER:     if anyone of nodeptr, newChild or oldChild is NULL.*       IXML_HIERARCHY_REQUEST_ERR: if the newChild is ancestor of nodeptr or nodeptr*                                   is of a type that does not allow children of the*                                   type of the newChild node.*       IXML_WRONG_DOCUMENT_ERR:    if newChild was created from a different document than*                                   the one that created this node.*       IXML_NOT_FOUND_ERR:         if oldChild is not a child of nodeptr.**=================================================================*/intixmlNode_replaceChild( IN IXML_Node * nodeptr,                       IN IXML_Node * newChild,                       IN IXML_Node * oldChild,                       OUT IXML_Node ** returnNode ){    int ret = IXML_SUCCESS;    if( ( nodeptr == NULL ) || ( newChild == NULL )        || ( oldChild == NULL ) ) {        return IXML_INVALID_PARAMETER;    }    // if nodetype of nodeptr does not allow children of the type of newChild     // needs to add later    // or if newChild is one of nodeptr's ancestors    if( ixmlNode_isAncestor( newChild, nodeptr ) == TRUE ) {        return IXML_HIERARCHY_REQUEST_ERR;    }    if( ixmlNode_allowChildren( nodeptr, newChild ) == FALSE ) {        return IXML_HIERARCHY_REQUEST_ERR;    }    // if newChild was created from a different document     if( nodeptr->ownerDocument != newChild->ownerDocument ) {        return IXML_WRONG_DOCUMENT_ERR;    }    // if refChild is not a child of nodeptr    if( ixmlNode_isParent( nodeptr, oldChild ) != TRUE ) {        return IXML_NOT_FOUND_ERR;    }    ret = ixmlNode_insertBefore( nodeptr, newChild, oldChild );    if( ret != IXML_SUCCESS ) {        return ret;    }    ret = ixmlNode_removeChild( nodeptr, oldChild, returnNode );    return ret;}/*================================================================*   ixmlNode_removeChild*       Removes the child node indicated by oldChild from the list of*       children, and returns it.*       External function.*   Parameters:*       oldChild: the node being removed.*       returnNode: the node removed.*   Return Value:*       IXML_SUCCESS*       IXML_NOT_FOUND_ERR: if oldChild is not a child of this node.*       IXML_INVALID_PARAMETER: if either oldChild or nodeptr is NULL**=================================================================*/intixmlNode_removeChild( IN IXML_Node * nodeptr,                      IN IXML_Node * oldChild,                      OUT IXML_Node ** returnNode ){    if( ( nodeptr == NULL ) || ( oldChild == NULL ) ) {        return IXML_INVALID_PARAMETER;    }    if( ixmlNode_isParent( nodeptr, oldChild ) == FALSE ) {        return IXML_NOT_FOUND_ERR;    }    if( oldChild->prevSibling != NULL ) {        ( oldChild->prevSibling )->nextSibling = oldChild->nextSibling;    }    if( nodeptr->firstChild == oldChild ) {        nodeptr->firstChild = oldChild->nextSibling;    }    if( oldChild->nextSibling != NULL ) {        ( oldChild->nextSibling )->prevSibling = oldChild->prevSibling;    }    oldChild->nextSibling = NULL;    oldChild->prevSibling = NULL;    oldChild->parentNode = NULL;    if( returnNode != NULL ) {        *returnNode = oldChild;    }    return IXML_SUCCESS;}/*=============================================================================*   ixmlNode_appendChild*       Adds the node newChild to the end of the list of children of this node.*       If the newChild is already in the tree, it is first removed.*       External function.   *   Parameter:*       newChild: the node to add.*   Return Value:*       IXML_SUCCESS*       IXML_INVALID_PARAMETER:     if either nodeptr or newChild is NULL*       IXML_WRONG_DOCUMENT_ERR:    if newChild was created from a different document than*                                   the one that created nodeptr.*       IXML_HIERARCHY_REQUEST_ERR: if newChild is ancestor of nodeptr or if nodeptr is of*                                   a type that does not allow children of the type of the*                                   newChild node.**=================================================================*/intixmlNode_appendChild( IN IXML_Node * nodeptr,                      IN IXML_Node * newChild ){    IXML_Node *prev = NULL,     *next = NULL;    if( ( nodeptr == NULL ) || ( newChild == NULL ) ) {        return IXML_INVALID_PARAMETER;    }    // if newChild was created from a different document     if( ( newChild->ownerDocument != NULL ) &&        ( nodeptr->ownerDocument != newChild->ownerDocument ) ) {        return IXML_WRONG_DOCUMENT_ERR;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -