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

📄 element.c

📁 Upnp开发包文件
💻 C
📖 第 1 页 / 共 2 页
字号:
                                  IN char *tagName ){    IXML_NodeList *returnNodeList = NULL;    if( ( element != NULL ) && ( tagName != NULL ) ) {        ixmlNode_getElementsByTagName( ( IXML_Node * ) element, tagName,                                       &returnNodeList );    }    return returnNodeList;}/*================================================================*   ixmlElement_getAttributeNS*       Retrieves an attribute value by local name and namespace URI.*       External function.**   Parameters:*       namespaceURI: the namespace URI of the attribute to retrieve.*       localName: the local name of the attribute to retrieve.**   Return Value:*       the attr value as a string, or NULL if that attribute does*       not have the specified value.**=================================================================*/DOMStringixmlElement_getAttributeNS( IN IXML_Element * element,                            IN DOMString namespaceURI,                            IN DOMString localName ){    IXML_Node *attrNode;    if( ( element == NULL ) || ( namespaceURI == NULL )        || ( localName == NULL ) ) {        return NULL;    }    attrNode = element->n.firstAttr;    while( attrNode != NULL ) {        if( strcmp( attrNode->localName, localName ) == 0 && strcmp( attrNode->namespaceURI, namespaceURI ) == 0 ) {    // found it            return attrNode->nodeValue;        } else {            attrNode = attrNode->nextSibling;        }    }    return NULL;}/*================================================================*   ixmlElement_setAttributeNS*       Adds a new attribute. If an attribute with the same local name*       and namespace URI is already present on the element, its prefix*       is changed to be the prefix part of the qualifiedName, and its*       value is changed to be the value parameter.  This value is a*       simple string.*       External function.**   Parameter:*       namespaceURI: the namespace of the attribute to create or alter.*       qualifiedName: the qualified name of the attribute to create or alter.*       value: the value to set in string form.**   Return Value:*       IXML_SUCCESS or failure **=================================================================*/intixmlElement_setAttributeNS( IN IXML_Element * element,                            IN DOMString namespaceURI,                            IN DOMString qualifiedName,                            IN DOMString value ){    IXML_Node *attrNode = NULL;    IXML_Node newAttrNode;    IXML_Attr *newAttr;    int rc;    if( ( element == NULL ) || ( namespaceURI == NULL ) ||        ( qualifiedName == NULL ) || ( value == NULL ) ) {        return IXML_INVALID_PARAMETER;    }    if( Parser_isValidXmlName( qualifiedName ) == FALSE ) {        return IXML_INVALID_CHARACTER_ERR;    }    ixmlNode_init( &newAttrNode );    newAttrNode.nodeName = strdup( qualifiedName );    if( newAttrNode.nodeName == NULL ) {        return IXML_INSUFFICIENT_MEMORY;    }    rc = Parser_setNodePrefixAndLocalName( &newAttrNode );    if( rc != IXML_SUCCESS ) {        Parser_freeNodeContent( &newAttrNode );        return rc;    }    // see DOM 2 spec page 59    if( ( newAttrNode.prefix != NULL && namespaceURI == NULL ) ||        ( strcmp( newAttrNode.prefix, "xml" ) == 0 &&          strcmp( namespaceURI,                  "http://www.w3.org/XML/1998/namespace" ) != 0 )        || ( strcmp( qualifiedName, "xmlns" ) == 0             && strcmp( namespaceURI,                        "http://www.w3.org/2000/xmlns/" ) != 0 ) ) {        Parser_freeNodeContent( &newAttrNode );        return IXML_NAMESPACE_ERR;    }    attrNode = element->n.firstAttr;    while( attrNode != NULL ) {        if( strcmp( attrNode->localName, newAttrNode.localName ) == 0 &&            strcmp( attrNode->namespaceURI, namespaceURI ) == 0 ) {            break;              //found it        } else {            attrNode = attrNode->nextSibling;        }    }    if( attrNode != NULL ) {        if( attrNode->prefix != NULL ) {            free( attrNode->prefix );   // remove the old prefix        }        // replace it with the new prefix        attrNode->prefix = strdup( newAttrNode.prefix );        if( attrNode->prefix == NULL ) {            Parser_freeNodeContent( &newAttrNode );            return IXML_INSUFFICIENT_MEMORY;        }        if( attrNode->nodeValue != NULL ) {            free( attrNode->nodeValue );        }        attrNode->nodeValue = strdup( value );        if( attrNode->nodeValue == NULL ) {            free( attrNode->prefix );            Parser_freeNodeContent( &newAttrNode );            return IXML_INSUFFICIENT_MEMORY;        }    } else {        // add a new attribute        rc = ixmlDocument_createAttributeNSEx( ( IXML_Document * )                                               element->n.ownerDocument,                                               namespaceURI, qualifiedName,                                               &newAttr );        if( rc != IXML_SUCCESS ) {            return rc;        }        newAttr->n.nodeValue = strdup( value );        if( newAttr->n.nodeValue == NULL ) {            ixmlAttr_free( newAttr );            return IXML_INSUFFICIENT_MEMORY;        }        if( ixmlElement_setAttributeNodeNS( element, newAttr, NULL ) !=            IXML_SUCCESS ) {            ixmlAttr_free( newAttr );            return IXML_FAILED;        }    }    Parser_freeNodeContent( &newAttrNode );    return IXML_SUCCESS;}/*================================================================*   ixmlElement_removeAttributeNS*       Removes an attribute by local name and namespace URI. The replacing*       attribute has the same namespace URI and local name, as well as*       the original prefix.*       External function.**   Parameters:*       namespaceURI: the namespace URI of the attribute to remove.*       localName: the local name of the atribute to remove.**   Return Value:*       IXML_SUCCESS or failure.**=================================================================*/intixmlElement_removeAttributeNS( IN IXML_Element * element,                               IN DOMString namespaceURI,                               IN DOMString localName ){    IXML_Node *attrNode;    if( ( element == NULL ) || ( namespaceURI == NULL )        || ( localName == NULL ) ) {        return IXML_INVALID_PARAMETER;    }    attrNode = element->n.firstAttr;    while( attrNode != NULL ) {        if( strcmp( attrNode->localName, localName ) == 0 &&            strcmp( attrNode->namespaceURI, namespaceURI ) == 0 ) {            break;              //found it        } else {            attrNode = attrNode->nextSibling;        }    }    if( attrNode != NULL ) {    // has the attribute        if( attrNode->nodeValue != NULL ) {            free( attrNode->nodeValue );            attrNode->nodeValue = NULL;        }    }    return IXML_SUCCESS;}/*================================================================*   ixmlElement_getAttributeNodeNS*       Retrieves an attr node by local name and namespace URI. *       External function.**   Parameter:*       namespaceURI: the namespace of the attribute to retrieve.*       localName: the local name of the attribute to retrieve.**   Return Value:*       The attr node with the specified attribute local name and *       namespace URI or null if there is no such attribute.**=================================================================*/IXML_Attr *ixmlElement_getAttributeNodeNS( IN IXML_Element * element,                                IN DOMString namespaceURI,                                IN DOMString localName ){    IXML_Node *attrNode;    if( ( element == NULL ) || ( namespaceURI == NULL )        || ( localName == NULL ) ) {        return NULL;    }    attrNode = element->n.firstAttr;    while( attrNode != NULL ) {        if( strcmp( attrNode->localName, localName ) == 0 && strcmp( attrNode->namespaceURI, namespaceURI ) == 0 ) {    // found it            break;        } else {            attrNode = attrNode->nextSibling;        }    }    return ( IXML_Attr * ) attrNode;}/*================================================================*   ixmlElement_setAttributeNodeNS*       Adds a new attribute. If an attribute with that local name and*       that namespace URI is already present in the element, it is replaced*       by the new one.*       External function.**   Parameter:*       newAttr: the attr node to add to the attribute list.**   Return Value:*       If the newAttr attribute replaces an existing attribute with the*       same local name and namespace, the replaced attr node is returned,*       otherwise null is returned.**=================================================================*/intixmlElement_setAttributeNodeNS( IN IXML_Element * element,                                IN IXML_Attr * newAttr,                                OUT IXML_Attr ** rtAttr ){    IXML_Node *attrNode;    IXML_Node *node;    IXML_Node *prevAttr = NULL,     *nextAttr = NULL;    IXML_Node *preSib,     *nextSib;    if( ( element == NULL ) || ( newAttr == NULL ) ) {        return IXML_INVALID_PARAMETER;    }    if( newAttr->n.ownerDocument != element->n.ownerDocument ) {        return IXML_WRONG_DOCUMENT_ERR;    }    if( ( newAttr->ownerElement != NULL )        && ( newAttr->ownerElement != element ) ) {        return IXML_INUSE_ATTRIBUTE_ERR;    }    newAttr->ownerElement = element;    node = ( IXML_Node * ) newAttr;    attrNode = element->n.firstAttr;    while( attrNode != NULL ) {        if( strcmp( attrNode->localName, node->localName ) == 0 &&            strcmp( attrNode->namespaceURI, node->namespaceURI ) == 0 ) {            break;              //found it        } else {            attrNode = attrNode->nextSibling;        }    }    if( attrNode != NULL )      // already present, will replace by newAttr    {        preSib = attrNode->prevSibling;        nextSib = attrNode->nextSibling;        if( preSib != NULL ) {            preSib->nextSibling = node;        }        if( nextSib != NULL ) {            nextSib->prevSibling = node;        }        if( element->n.firstAttr == attrNode ) {            element->n.firstAttr = node;        }        *rtAttr = ( IXML_Attr * ) attrNode;    } else                      // add this attribute     {        if( element->n.firstAttr != NULL )  // element has attribute already        {            prevAttr = element->n.firstAttr;            nextAttr = prevAttr->nextSibling;            while( nextAttr != NULL ) {                prevAttr = nextAttr;                nextAttr = prevAttr->nextSibling;            }            prevAttr->nextSibling = node;        } else                  // this is the first attribute node        {            element->n.firstAttr = node;            node->prevSibling = NULL;            node->nextSibling = NULL;        }        if( rtAttr != NULL ) {            *rtAttr = NULL;        }    }    return IXML_SUCCESS;}/*================================================================*   ixmlElement_getElementsByTagNameNS*       Returns a nodeList of all the descendant Elements with a given*       local name and namespace in the order in which they are encountered*       in a preorder traversal of the element tree.*       External function.**   Parameters:*       namespaceURI: the namespace URI of the elements to match on. The*               special value "*" matches all namespaces.*       localName: the local name of the elements to match on. The special*               value "*" matches all local names.**   Return Value:*       A new nodeList object containing all the matched Elements.**=================================================================*/IXML_NodeList *ixmlElement_getElementsByTagNameNS( IN IXML_Element * element,                                    IN DOMString namespaceURI,                                    IN DOMString localName ){    IXML_Node *node = ( IXML_Node * ) element;    IXML_NodeList *nodeList = NULL;    if( ( element != NULL ) && ( namespaceURI != NULL )        && ( localName != NULL ) ) {        ixmlNode_getElementsByTagNameNS( node, namespaceURI, localName,                                         &nodeList );    }    return nodeList;}/*================================================================*   ixmlElement_hasAttribute*       Returns true when an attribute with a given name is specified on*       this element, false otherwise.*       External function.**   Parameters:*       name: the name of the attribute to look for.**   Return Value:*       ture if an attribute with the given name is specified on this*       element, false otherwise.**=================================================================*/BOOLixmlElement_hasAttribute( IN IXML_Element * element,                          IN DOMString name ){    IXML_Node *attrNode;    if( ( element == NULL ) || ( name == NULL ) ) {        return FALSE;    }    attrNode = element->n.firstAttr;    while( attrNode != NULL ) {        if( strcmp( attrNode->nodeName, name ) == 0 ) {            return TRUE;        } else {            attrNode = attrNode->nextSibling;        }    }    return FALSE;}/*================================================================*   ixmlElement_hasAttributeNS*       Returns true when attribute with a given local name and namespace*       URI is specified on this element, false otherwise.*       External function.**   Parameters:*       namespaceURI: the namespace URI of the attribute to look for.*       localName: the local name of the attribute to look for.**   Return Value:*       true if an attribute with the given local name and namespace URI*       is specified, false otherwise.**=================================================================*/BOOLixmlElement_hasAttributeNS( IN IXML_Element * element,                            IN DOMString namespaceURI,                            IN DOMString localName ){    IXML_Node *attrNode;    if( ( element == NULL ) || ( namespaceURI == NULL )        || ( localName == NULL ) ) {        return FALSE;    }    attrNode = element->n.firstAttr;    while( attrNode != NULL ) {        if( strcmp( attrNode->localName, localName ) == 0 &&            strcmp( attrNode->namespaceURI, namespaceURI ) == 0 ) {            return TRUE;        } else {            attrNode = attrNode->nextSibling;        }    }    return FALSE;}/*================================================================*   ixmlElement_free*       frees a element node.*       External function.**=================================================================*/voidixmlElement_free( IN IXML_Element * element ){    if( element != NULL ) {        ixmlNode_free( ( IXML_Node * ) element );    }}

⌨️ 快捷键说明

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