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

📄 node.c

📁 Upnp开发包文件
💻 C
📖 第 1 页 / 共 4 页
字号:
                while( childNode != NULL ) {                    childNode->parentNode = ( IXML_Node * ) newElement;                    childNode = childNode->nextSibling;                }                newElement->n.nextSibling = NULL;            }            newNode = ( IXML_Node * ) newElement;            break;        case eATTRIBUTE_NODE:        case eTEXT_NODE:        case eCDATA_SECTION_NODE:        case eDOCUMENT_NODE:            newNode = ixmlNode_cloneNodeTreeRecursive( nodeptr, deep );            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;    }    // by spec, the duplicate node has no parent    newNode->parentNode = NULL;    return newNode;}/*================================================================*   ixmlNode_cloneNode*       Clones a node, if deep==TRUE, clones subtree under nodeptr.*       External function.*   Returns:*       the cloned node or NULL if error occurs.**=================================================================*/IXML_Node *ixmlNode_cloneNode( IN IXML_Node * nodeptr,                    IN BOOL deep ){    IXML_Node *newNode;    IXML_Attr *newAttrNode;    if( nodeptr == NULL ) {        return NULL;    }    switch ( nodeptr->nodeType ) {        case eATTRIBUTE_NODE:            newAttrNode =                ixmlNode_cloneAttrDirect( ( IXML_Attr * ) nodeptr );            return ( IXML_Node * ) newAttrNode;            break;        default:            newNode = ixmlNode_cloneNodeTree( nodeptr, deep );            return newNode;            break;    }}/*================================================================*   ixmlNode_getChildNodes*       Returns a IXML_NodeList of all the child nodes of nodeptr.*       External function.*   *=================================================================*/IXML_NodeList *ixmlNode_getChildNodes( IN IXML_Node * nodeptr ){    IXML_Node *tempNode;    IXML_NodeList *newNodeList;    int rc;    if( nodeptr == NULL ) {        return NULL;    }    newNodeList = ( IXML_NodeList * ) malloc( sizeof( IXML_NodeList ) );    if( newNodeList == NULL ) {        return NULL;    }    ixmlNodeList_init( newNodeList );    tempNode = nodeptr->firstChild;    while( tempNode != NULL ) {        rc = ixmlNodeList_addToNodeList( &newNodeList, tempNode );        if( rc != IXML_SUCCESS ) {            ixmlNodeList_free( newNodeList );            return NULL;        }        tempNode = tempNode->nextSibling;    }    return newNodeList;}/*================================================================*   ixmlNode_getAttributes*       returns a namedNodeMap of attributes of nodeptr*       External function.*   Returns:**=================================================================*/IXML_NamedNodeMap *ixmlNode_getAttributes( IN IXML_Node * nodeptr ){    IXML_NamedNodeMap *returnNamedNodeMap = NULL;    IXML_Node *tempNode;    int rc;    if( nodeptr == NULL ) {        return NULL;    }    if( nodeptr->nodeType == eELEMENT_NODE ) {        returnNamedNodeMap =            ( IXML_NamedNodeMap * ) malloc( sizeof( IXML_NamedNodeMap ) );        if( returnNamedNodeMap == NULL ) {            return NULL;        }        ixmlNamedNodeMap_init( returnNamedNodeMap );        tempNode = nodeptr->firstAttr;        while( tempNode != NULL ) {            rc = ixmlNamedNodeMap_addToNamedNodeMap( &returnNamedNodeMap,                                                     tempNode );            if( rc != IXML_SUCCESS ) {                ixmlNamedNodeMap_free( returnNamedNodeMap );                return NULL;            }            tempNode = tempNode->nextSibling;        }        return returnNamedNodeMap;    } else {                    // if not an ELEMENT_NODE        return NULL;    }}/*================================================================*   ixmlNode_hasChildNodes*       External function.**=================================================================*/BOOLixmlNode_hasChildNodes( IXML_Node * nodeptr ){    if( nodeptr == NULL ) {        return FALSE;    }    return ( nodeptr->firstChild != NULL );}/*================================================================*   ixmlNode_hasAttributes*       External function.**=================================================================*/BOOLixmlNode_hasAttributes( IXML_Node * nodeptr ){    if( nodeptr != NULL ) {        if( ( nodeptr->nodeType == eELEMENT_NODE )            && ( nodeptr->firstAttr != NULL ) ) {            return TRUE;        }    }    return FALSE;}/*================================================================*   ixmlNode_getElementsByTagNameRecursive*       Recursively traverse the whole tree, search for element*       with the given tagname.*       Internal to parser.**=================================================================*/voidixmlNode_getElementsByTagNameRecursive( IN IXML_Node * n,                                        IN char *tagname,                                        OUT IXML_NodeList ** list ){    const char *name;    if( n != NULL ) {        if( ixmlNode_getNodeType( n ) == eELEMENT_NODE ) {            name = ixmlNode_getNodeName( n );            if( strcmp( tagname, name ) == 0                || strcmp( tagname, "*" ) == 0 ) {                ixmlNodeList_addToNodeList( list, n );            }        }        ixmlNode_getElementsByTagNameRecursive( ixmlNode_getFirstChild                                                ( n ), tagname, list );        ixmlNode_getElementsByTagNameRecursive( ixmlNode_getNextSibling                                                ( n ), tagname, list );    }}/*================================================================*   ixmlNode_getElementsByTagName*       Returns a nodeList of all descendant Elements with a given *       tagName, in the order in which they are encountered in a*       traversal of this element tree.*       External function.		**=================================================================*/voidixmlNode_getElementsByTagName( IN IXML_Node * n,                               IN char *tagname,                               OUT IXML_NodeList ** list ){    const char *name;    assert( n != NULL && tagname != NULL );    if( ixmlNode_getNodeType( n ) == eELEMENT_NODE ) {        name = ixmlNode_getNodeName( n );        if( strcmp( tagname, name ) == 0 || strcmp( tagname, "*" ) == 0 ) {            ixmlNodeList_addToNodeList( list, n );        }    }    ixmlNode_getElementsByTagNameRecursive( ixmlNode_getFirstChild( n ),                                            tagname, list );}/*================================================================*   ixmlNode_getElementsByTagNameNSRecursive*	    Internal function to parser.	*		**=================================================================*/voidixmlNode_getElementsByTagNameNSRecursive( IN IXML_Node * n,                                          IN char *namespaceURI,                                          IN char *localName,                                          OUT IXML_NodeList ** list ){    const DOMString nsURI;    const DOMString name;    if( n != NULL ) {        if( ixmlNode_getNodeType( n ) == eELEMENT_NODE ) {            name = ixmlNode_getLocalName( n );            nsURI = ixmlNode_getNamespaceURI( n );            if( ( name != NULL ) && ( nsURI != NULL ) &&                ( strcmp( namespaceURI, nsURI ) == 0                  || strcmp( namespaceURI, "*" ) == 0 )                && ( strcmp( name, localName ) == 0                     || strcmp( localName, "*" ) == 0 ) ) {                ixmlNodeList_addToNodeList( list, n );            }        }        ixmlNode_getElementsByTagNameNSRecursive( ixmlNode_getFirstChild                                                  ( n ), namespaceURI,                                                  localName, list );        ixmlNode_getElementsByTagNameNSRecursive( ixmlNode_getNextSibling                                                  ( n ), namespaceURI,                                                  localName, list );    }}/*================================================================*   ixmlNode_getElementsByTagNameNS*       Returns a nodeList of all the descendant Elements with a given*       local name and namespace URI in the order in which they are*       encountered in a preorder traversal of this Elememt tree.		*		External function.**=================================================================*/voidixmlNode_getElementsByTagNameNS( IN IXML_Node * n,                                 IN char *namespaceURI,                                 IN char *localName,                                 OUT IXML_NodeList ** list ){    const DOMString nsURI;    const DOMString name;    assert( n != NULL && namespaceURI != NULL && localName != NULL );    if( ixmlNode_getNodeType( n ) == eELEMENT_NODE ) {        name = ixmlNode_getLocalName( n );        nsURI = ixmlNode_getNamespaceURI( n );        if( ( name != NULL ) && ( nsURI != NULL ) &&            ( strcmp( namespaceURI, nsURI ) == 0              || strcmp( namespaceURI, "*" ) == 0 )            && ( strcmp( name, localName ) == 0                 || strcmp( localName, "*" ) == 0 ) ) {            ixmlNodeList_addToNodeList( list, n );        }    }    ixmlNode_getElementsByTagNameNSRecursive( ixmlNode_getFirstChild( n ),                                              namespaceURI, localName,                                              list );}/*================================================================*   ixmlNode_setNodeName*       Internal to parser only.**=================================================================*/intixmlNode_setNodeName( IN IXML_Node * node,                      IN DOMString qualifiedName ){    int rc = IXML_SUCCESS;    assert( node != NULL );    if( node->nodeName != NULL ) {        free( node->nodeName );        node->nodeName = NULL;    }    if( qualifiedName != NULL ) {        // set the name part        node->nodeName = strdup( qualifiedName );        if( node->nodeName == NULL ) {            return IXML_INSUFFICIENT_MEMORY;        }        rc = Parser_setNodePrefixAndLocalName( node );        if( rc != IXML_SUCCESS ) {            free( node->nodeName );        }    }    return rc;}/*================================================================*   ixmlNode_setNodeProperties*       Internal to parser only.**=================================================================*/intixmlNode_setNodeProperties( IN IXML_Node * destNode,                            IN IXML_Node * src ){    int rc;    assert( destNode != NULL || src != NULL );    rc = ixmlNode_setNodeValue( destNode, src->nodeValue );    if( rc != IXML_SUCCESS ) {        goto ErrorHandler;    }    rc = ixmlNode_setLocalName( destNode, src->localName );    if( rc != IXML_SUCCESS ) {        goto ErrorHandler;    }    rc = ixmlNode_setPrefix( destNode, src->prefix );    if( rc != IXML_SUCCESS ) {        goto ErrorHandler;    }    // set nodetype    destNode->nodeType = src->nodeType;    return IXML_SUCCESS;  ErrorHandler:    if( destNode->nodeName != NULL ) {        free( destNode->nodeName );        destNode->nodeName = NULL;    }    if( destNode->nodeValue != NULL ) {        free( destNode->nodeValue );        destNode->nodeValue = NULL;    }    if( destNode->localName != NULL ) {        free( destNode->localName );        destNode->localName = NULL;    }    return IXML_INSUFFICIENT_MEMORY;}

⌨️ 快捷键说明

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