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

📄 document.c

📁 Upnp开发包文件
💻 C
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////// Copyright (c) 2000-2003 Intel Corporation // All rights reserved. //// Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: //// * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither name of Intel Corporation nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission.// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE./////////////////////////////////////////////////////////////////////////////#include <stdio.h>#include <stdlib.h>#include "ixmlparser.h"/*================================================================*   ixmlDocument_init*       It initialize the document structure.*       External function.*   *=================================================================*/voidixmlDocument_init( IN IXML_Document * doc ){    memset( doc, 0, sizeof( IXML_Document ) );}/*================================================================*   ixmlDocument_free*       It frees the whole document tree.*       External function.**=================================================================*/voidixmlDocument_free( IN IXML_Document * doc ){    if( doc != NULL ) {        ixmlNode_free( ( IXML_Node * ) doc );    }}/*================================================================*   ixmlDocument_setOwnerDocument*       *       When this function is called first time, nodeptr is the root*       of the subtree, so it is not necessay to do two steps*       recursion.*        *       Internal function called by ixmlDocument_importNode**=================================================================*/voidixmlDocument_setOwnerDocument( IN IXML_Document * doc,                               IN IXML_Node * nodeptr ){    if( nodeptr != NULL ) {        nodeptr->ownerDocument = doc;        ixmlDocument_setOwnerDocument( doc,                                       ixmlNode_getFirstChild( nodeptr ) );        ixmlDocument_setOwnerDocument( doc,                                       ixmlNode_getNextSibling                                       ( nodeptr ) );    }}/*================================================================*   ixmlDocument_importNode*       Imports a node from another document to this document. The*       returned node has no parent; (parentNode is null). The source*       node is not altered or removed from the original document;*       this method creates a new copy of the source node. *       For all nodes, importing a node creates a node object owned*       by the importing document, with attribute values identical to*       the source node's nodeName and nodeType, plus the attributes*       related to namespaces (prefix, localName, and namespaceURI).*       As in the cloneNode operation on a node, the source node is*       not altered.*       *       External function.**=================================================================*/intixmlDocument_importNode( IN IXML_Document * doc,                         IN IXML_Node * importNode,                         IN BOOL deep,                         OUT IXML_Node ** rtNode ){    unsigned short nodeType;    IXML_Node *newNode;    *rtNode = NULL;    if( ( doc == NULL ) || ( importNode == NULL ) ) {        return IXML_INVALID_PARAMETER;    }    nodeType = ixmlNode_getNodeType( importNode );    if( nodeType == eDOCUMENT_NODE ) {        return IXML_NOT_SUPPORTED_ERR;    }    newNode = ixmlNode_cloneNode( importNode, deep );    if( newNode == NULL ) {        return IXML_FAILED;    }    ixmlDocument_setOwnerDocument( doc, newNode );    *rtNode = newNode;    return IXML_SUCCESS;}/*================================================================*   ixmlDocument_createElementEx*       Creates an element of the type specified. *       External function.*   Parameters:*       doc:        pointer to document*       tagName:    The name of the element, it is case-sensitive.*   Return Value:*       IXML_SUCCESS*       IXML_INVALID_PARAMETER:     if either doc or tagName is NULL*       IXML_INSUFFICIENT_MEMORY:   if not enough memory to finish this operations.**=================================================================*/intixmlDocument_createElementEx( IN IXML_Document * doc,                              IN DOMString tagName,                              OUT IXML_Element ** rtElement ){    int errCode = IXML_SUCCESS;    IXML_Element *newElement = NULL;    if( ( doc == NULL ) || ( tagName == NULL ) ) {        errCode = IXML_INVALID_PARAMETER;        goto ErrorHandler;    }    newElement = ( IXML_Element * ) malloc( sizeof( IXML_Element ) );    if( newElement == NULL ) {        errCode = IXML_INSUFFICIENT_MEMORY;        goto ErrorHandler;    }    ixmlElement_init( newElement );    newElement->tagName = strdup( tagName );    if( newElement->tagName == NULL ) {        ixmlElement_free( newElement );        newElement = NULL;        errCode = IXML_INSUFFICIENT_MEMORY;        goto ErrorHandler;    }    // set the node fields     newElement->n.nodeType = eELEMENT_NODE;    newElement->n.nodeName = strdup( tagName );    if( newElement->n.nodeName == NULL ) {        ixmlElement_free( newElement );        newElement = NULL;        errCode = IXML_INSUFFICIENT_MEMORY;        goto ErrorHandler;    }    newElement->n.ownerDocument = doc;  ErrorHandler:    *rtElement = newElement;    return errCode;}/*================================================================*   ixmlDocument_createElement*       Creates an element of the type specified. *       External function.*   Parameters:*       doc:        pointer to document*       tagName:    The name of the element, it is case-sensitive.*   Return Value: *       A new element object with the nodeName set to tagName, and*       localName, prefix and namespaceURI set to null.**=================================================================*/IXML_Element *ixmlDocument_createElement( IN IXML_Document * doc,                            IN DOMString tagName ){    IXML_Element *newElement = NULL;    ixmlDocument_createElementEx( doc, tagName, &newElement );    return newElement;}/*================================================================*   ixmlDocument_createDocumentEx*       Creates an document object*       Internal function.*   Parameters:*       rtDoc:  the document created or NULL on failure*   Return Value:*       IXML_SUCCESS*       IXML_INSUFFICIENT_MEMORY:   if not enough memory to finish this operations.**=================================================================*/intixmlDocument_createDocumentEx( OUT IXML_Document ** rtDoc ){    IXML_Document *doc;    int errCode = IXML_SUCCESS;    doc = NULL;    doc = ( IXML_Document * ) malloc( sizeof( IXML_Document ) );    if( doc == NULL ) {        errCode = IXML_INSUFFICIENT_MEMORY;        goto ErrorHandler;    }    ixmlDocument_init( doc );    doc->n.nodeName = strdup( DOCUMENTNODENAME );    if( doc->n.nodeName == NULL ) {        ixmlDocument_free( doc );        doc = NULL;        errCode = IXML_INSUFFICIENT_MEMORY;        goto ErrorHandler;    }    doc->n.nodeType = eDOCUMENT_NODE;    doc->n.ownerDocument = doc;  ErrorHandler:    *rtDoc = doc;    return errCode;}/*================================================================*   ixmlDocument_createDocument*       Creates an document object*       Internal function.*   Parameters:*       none*   Return Value:*       A new document object with the nodeName set to "#document".**=================================================================*/IXML_Document *ixmlDocument_createDocument(  ){    IXML_Document *doc = NULL;    ixmlDocument_createDocumentEx( &doc );    return doc;}/*================================================================*   ixmlDocument_createTextNodeEx*       Creates an text node. *       External function.*   Parameters:*       data: text data for the text node. It is stored in nodeValue field.*   Return Value:*       IXML_SUCCESS*       IXML_INVALID_PARAMETER:     if either doc or data is NULL*       IXML_INSUFFICIENT_MEMORY:   if not enough memory to finish this operations.**=================================================================*/intixmlDocument_createTextNodeEx( IN IXML_Document * doc,                               IN char *data,                               OUT IXML_Node ** textNode ){    IXML_Node *returnNode;    int rc = IXML_SUCCESS;    returnNode = NULL;    if( ( doc == NULL ) || ( data == NULL ) ) {        rc = IXML_INVALID_PARAMETER;        goto ErrorHandler;    }    returnNode = ( IXML_Node * ) malloc( sizeof( IXML_Node ) );    if( returnNode == NULL ) {        rc = IXML_INSUFFICIENT_MEMORY;        goto ErrorHandler;    }    // initialize the node    ixmlNode_init( returnNode );    returnNode->nodeName = strdup( TEXTNODENAME );    if( returnNode->nodeName == NULL ) {        ixmlNode_free( returnNode );        returnNode = NULL;        rc = IXML_INSUFFICIENT_MEMORY;        goto ErrorHandler;    }    // add in node value    if( data != NULL ) {        returnNode->nodeValue = strdup( data );        if( returnNode->nodeValue == NULL ) {            ixmlNode_free( returnNode );            returnNode = NULL;            rc = IXML_INSUFFICIENT_MEMORY;            goto ErrorHandler;        }    }    returnNode->nodeType = eTEXT_NODE;    returnNode->ownerDocument = doc;  ErrorHandler:    *textNode = returnNode;    return rc;}/*================================================================*   ixmlDocument_createTextNode*       Creates an text node. *       External function.*   Parameters:*       data: text data for the text node. It is stored in nodeValue field.*   Return Value:*       The new text node.**=================================================================*/IXML_Node *ixmlDocument_createTextNode( IN IXML_Document * doc,                             IN char *data ){    IXML_Node *returnNode = NULL;    ixmlDocument_createTextNodeEx( doc, data, &returnNode );    return returnNode;}/*================================================================*   ixmlDocument_createAttributeEx*       Creates an attribute of the given name.             *       External function.*   Parameters:*       name: The name of the Attribute node.*   Return Value:*       IXML_SUCCESS*       IXML_INSUFFICIENT_MEMORY:   if not enough memory to finish this operations.*================================================================*/intixmlDocument_createAttributeEx( IN IXML_Document * doc,                                IN char *name,                                OUT IXML_Attr ** rtAttr ){    IXML_Attr *attrNode = NULL;    int errCode = IXML_SUCCESS;    attrNode = ( IXML_Attr * ) malloc( sizeof( IXML_Attr ) );    if( attrNode == NULL ) {        errCode = IXML_INSUFFICIENT_MEMORY;        goto ErrorHandler;    }    if( ( doc == NULL ) || ( name == NULL ) ) {        ixmlAttr_free( attrNode );        attrNode = NULL;        errCode = IXML_INVALID_PARAMETER;        goto ErrorHandler;    }    ixmlAttr_init( attrNode );    attrNode->n.nodeType = eATTRIBUTE_NODE;    // set the node fields    attrNode->n.nodeName = strdup( name );    if( attrNode->n.nodeName == NULL ) {        ixmlAttr_free( attrNode );        attrNode = NULL;

⌨️ 快捷键说明

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