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

📄 node.c

📁 Upnp开发包文件
💻 C
📖 第 1 页 / 共 4 页
字号:
    }    // if newChild is an ancestor of nodeptr    if( ixmlNode_isAncestor( newChild, nodeptr ) == TRUE ) {        return IXML_HIERARCHY_REQUEST_ERR;    }    // if nodeptr does not allow to have newChild as children    if( ixmlNode_allowChildren( nodeptr, newChild ) == FALSE ) {        return IXML_HIERARCHY_REQUEST_ERR;    }    if( ixmlNode_isParent( nodeptr, newChild ) == TRUE ) {        ixmlNode_removeChild( nodeptr, newChild, NULL );    }    // set the parent node pointer    newChild->parentNode = nodeptr;    newChild->ownerDocument = nodeptr->ownerDocument;    //if the first child    if( nodeptr->firstChild == NULL ) {        nodeptr->firstChild = newChild;    } else {        prev = nodeptr->firstChild;        next = prev->nextSibling;        while( next != NULL ) {            prev = next;            next = prev->nextSibling;        }        prev->nextSibling = newChild;        newChild->prevSibling = prev;    }    return IXML_SUCCESS;}/*================================================================*   ixmlNode_cloneTextNode*       Returns a clone of nodeptr*       Internal to parser only.**=================================================================*/IXML_Node *ixmlNode_cloneTextNode( IN IXML_Node * nodeptr ){    IXML_Node *newNode = NULL;    assert( nodeptr != NULL );    newNode = ( IXML_Node * ) malloc( sizeof( IXML_Node ) );    if( newNode == NULL ) {        return NULL;    } else {        ixmlNode_init( newNode );        ixmlNode_setNodeName( newNode, nodeptr->nodeName );        ixmlNode_setNodeValue( newNode, nodeptr->nodeValue );        newNode->nodeType = eTEXT_NODE;    }    return newNode;}/*================================================================*   ixmlNode_cloneCDATASect*       Return a clone of CDATASection node.*       Internal to parser only.**=================================================================*/IXML_CDATASection *ixmlNode_cloneCDATASect( IN IXML_CDATASection * nodeptr ){    IXML_CDATASection *newCDATA = NULL;    IXML_Node *newNode;    IXML_Node *srcNode;    assert( nodeptr != NULL );    newCDATA =        ( IXML_CDATASection * ) malloc( sizeof( IXML_CDATASection ) );    if( newCDATA != NULL ) {        newNode = ( IXML_Node * ) newCDATA;        ixmlNode_init( newNode );        srcNode = ( IXML_Node * ) nodeptr;        ixmlNode_setNodeName( newNode, srcNode->nodeName );        ixmlNode_setNodeValue( newNode, srcNode->nodeValue );        newNode->nodeType = eCDATA_SECTION_NODE;    }    return newCDATA;}/*================================================================*   ixmlNode_cloneElement*       returns a clone of element node*       Internal to parser only.**=================================================================*/IXML_Element *ixmlNode_cloneElement( IN IXML_Element * nodeptr ){    IXML_Element *newElement;    IXML_Node *elementNode;    IXML_Node *srcNode;    int rc;    assert( nodeptr != NULL );    newElement = ( IXML_Element * ) malloc( sizeof( IXML_Element ) );    if( newElement == NULL ) {        return NULL;    }    ixmlElement_init( newElement );    rc = ixmlElement_setTagName( newElement, nodeptr->tagName );    if( rc != IXML_SUCCESS ) {        ixmlElement_free( newElement );    }    elementNode = ( IXML_Node * ) newElement;    srcNode = ( IXML_Node * ) nodeptr;    rc = ixmlNode_setNodeName( elementNode, srcNode->nodeName );    if( rc != IXML_SUCCESS ) {        ixmlElement_free( newElement );    }    rc = ixmlNode_setNodeValue( elementNode, srcNode->nodeValue );    if( rc != IXML_SUCCESS ) {        ixmlElement_free( newElement );    }    rc = ixmlNode_setNamespaceURI( elementNode, srcNode->namespaceURI );    if( rc != IXML_SUCCESS ) {        ixmlElement_free( newElement );    }    rc = ixmlNode_setPrefix( elementNode, srcNode->prefix );    if( rc != IXML_SUCCESS ) {        ixmlElement_free( newElement );    }    rc = ixmlNode_setLocalName( elementNode, srcNode->localName );    if( rc != IXML_SUCCESS ) {        ixmlElement_free( newElement );    }    elementNode->nodeType = eELEMENT_NODE;    return newElement;}/*================================================================*   ixmlNode_cloneDoc*       Returns a clone of document node*       Internal to parser only.**=================================================================*/IXML_Document *ixmlNode_cloneDoc( IN IXML_Document * nodeptr ){    IXML_Document *newDoc;    IXML_Node *docNode;    int rc;    assert( nodeptr != NULL );    newDoc = ( IXML_Document * ) malloc( sizeof( IXML_Document ) );    if( newDoc == NULL ) {        return NULL;    }    ixmlDocument_init( newDoc );    docNode = ( IXML_Node * ) newDoc;    rc = ixmlNode_setNodeName( docNode, DOCUMENTNODENAME );    if( rc != IXML_SUCCESS ) {        ixmlDocument_free( newDoc );        return NULL;    }    newDoc->n.nodeType = eDOCUMENT_NODE;    return newDoc;}/*================================================================*   ixmlNode_cloneAttr*       Returns a clone of attribute node*       Internal to parser only**=================================================================*/IXML_Attr *ixmlNode_cloneAttr( IN IXML_Attr * nodeptr ){    IXML_Attr *newAttr;    IXML_Node *attrNode;    IXML_Node *srcNode;    int rc;    assert( nodeptr != NULL );    newAttr = ( IXML_Attr * ) malloc( sizeof( IXML_Attr ) );    if( newAttr == NULL ) {        return NULL;    }    ixmlAttr_init( newAttr );    attrNode = ( IXML_Node * ) newAttr;    srcNode = ( IXML_Node * ) nodeptr;    rc = ixmlNode_setNodeName( attrNode, srcNode->nodeName );    if( rc != IXML_SUCCESS ) {        ixmlAttr_free( newAttr );        return NULL;    }    rc = ixmlNode_setNodeValue( attrNode, srcNode->nodeValue );    if( rc != IXML_SUCCESS ) {        ixmlAttr_free( newAttr );        return NULL;    }    //check to see whether we need to split prefix and localname for attribute    rc = ixmlNode_setNamespaceURI( attrNode, srcNode->namespaceURI );    if( rc != IXML_SUCCESS ) {        ixmlAttr_free( newAttr );        return NULL;    }    rc = ixmlNode_setPrefix( attrNode, srcNode->prefix );    if( rc != IXML_SUCCESS ) {        ixmlAttr_free( newAttr );        return NULL;    }    rc = ixmlNode_setLocalName( attrNode, srcNode->localName );    if( rc != IXML_SUCCESS ) {        ixmlAttr_free( newAttr );        return NULL;    }    attrNode->nodeType = eATTRIBUTE_NODE;    return newAttr;}/*================================================================*   ixmlNode_cloneAttrDirect*       Return a clone of attribute node, with specified field set*       to TRUE.**=================================================================*/IXML_Attr *ixmlNode_cloneAttrDirect( IN IXML_Attr * nodeptr ){    IXML_Attr *newAttr;    assert( nodeptr != NULL );    newAttr = ixmlNode_cloneAttr( nodeptr );    if( newAttr != NULL ) {        newAttr->specified = TRUE;    }    return newAttr;}voidixmlNode_setSiblingNodesParent( IXML_Node * nodeptr ){    IXML_Node *parentNode = nodeptr->parentNode;    IXML_Node *nextptr = nodeptr->nextSibling;    while( nextptr != NULL ) {        nextptr->parentNode = parentNode;        nextptr = nextptr->nextSibling;    }}/*================================================================*   ixmlNode_cloneNodeTreeRecursive*       recursive functions that clones node tree of nodeptr.*       Internal to parser only.*       *=================================================================*/IXML_Node *ixmlNode_cloneNodeTreeRecursive( IN IXML_Node * nodeptr,                                 IN BOOL deep ){    IXML_Node *newNode = NULL;    IXML_Element *newElement;    IXML_Attr *newAttr = NULL;    IXML_CDATASection *newCDATA = NULL;    IXML_Document *newDoc;    IXML_Node *nextSib;    if( nodeptr != NULL ) {        switch ( nodeptr->nodeType ) {            case eELEMENT_NODE:                newElement =                    ixmlNode_cloneElement( ( IXML_Element * ) nodeptr );                newElement->n.firstAttr =                    ixmlNode_cloneNodeTreeRecursive( nodeptr->firstAttr,                                                     deep );                if( deep ) {                    newElement->n.firstChild =                        ixmlNode_cloneNodeTreeRecursive( nodeptr->                                                         firstChild,                                                         deep );                    if( newElement->n.firstChild != NULL ) {                        ( newElement->n.firstChild )->parentNode =                            ( IXML_Node * ) newElement;                        ixmlNode_setSiblingNodesParent( newElement->n.                                                        firstChild );                    }                    nextSib =                        ixmlNode_cloneNodeTreeRecursive( nodeptr->                                                         nextSibling,                                                         deep );                    newElement->n.nextSibling = nextSib;                    if( nextSib != NULL ) {                        nextSib->prevSibling = ( IXML_Node * ) newElement;                    }                }                newNode = ( IXML_Node * ) newElement;                break;            case eATTRIBUTE_NODE:                newAttr = ixmlNode_cloneAttr( ( IXML_Attr * ) nodeptr );                nextSib =                    ixmlNode_cloneNodeTreeRecursive( nodeptr->nextSibling,                                                     deep );                newAttr->n.nextSibling = nextSib;                if( nextSib != NULL ) {                    nextSib->prevSibling = ( IXML_Node * ) newAttr;                }                newNode = ( IXML_Node * ) newAttr;                break;            case eTEXT_NODE:                newNode = ixmlNode_cloneTextNode( nodeptr );                break;            case eCDATA_SECTION_NODE:                newCDATA =                    ixmlNode_cloneCDATASect( ( IXML_CDATASection * )                                             nodeptr );                newNode = ( IXML_Node * ) newCDATA;                break;            case eDOCUMENT_NODE:                newDoc = ixmlNode_cloneDoc( ( IXML_Document * ) nodeptr );                newNode = ( IXML_Node * ) newDoc;                if( deep ) {                    newNode->firstChild =                        ixmlNode_cloneNodeTreeRecursive( nodeptr->                                                         firstChild,                                                         deep );                    if( newNode->firstChild != NULL ) {                        newNode->firstChild->parentNode = newNode;                    }                }                break;            case eINVALID_NODE:            case eENTITY_REFERENCE_NODE:            case eENTITY_NODE:            case ePROCESSING_INSTRUCTION_NODE:            case eCOMMENT_NODE:            case eDOCUMENT_TYPE_NODE:            case eDOCUMENT_FRAGMENT_NODE:            case eNOTATION_NODE:                break;        }    }    return newNode;}/*================================================================*   ixmlNode_cloneNodeTree*       clones a node tree.*       Internal to parser only.**=================================================================*/IXML_Node *ixmlNode_cloneNodeTree( IN IXML_Node * nodeptr,                        IN BOOL deep ){    IXML_Node *newNode = NULL;    IXML_Element *newElement;    IXML_Node *childNode;    assert( nodeptr != NULL );    switch ( nodeptr->nodeType ) {        case eELEMENT_NODE:            newElement =                ixmlNode_cloneElement( ( IXML_Element * ) nodeptr );            newElement->n.firstAttr =                ixmlNode_cloneNodeTreeRecursive( nodeptr->firstAttr,                                                 deep );            if( deep ) {                newElement->n.firstChild =                    ixmlNode_cloneNodeTreeRecursive( nodeptr->firstChild,                                                     deep );                childNode = newElement->n.firstChild;

⌨️ 快捷键说明

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