コード例 #1
0
ファイル: database.c プロジェクト: glace/RSSReminder
int exportDatabase( const char * filename, struct database_t * databaseList, int * databaseListTotal, struct userAttr_t * userAttr ){
    int subscript;
    char longStr[100000];
    char message[500];
    xmlNodePtr node;
    xmlNodePtr content;
    xmlNodePtr sonNode;
    xmlNodePtr grandsonNode;

    // create the doc and root node
    xmlDocPtr doc = xmlNewDoc( BAD_CAST "1.0" );
    xmlNodePtr root_node = xmlNewNode( NULL, BAD_CAST "databaseList" );

    xitoa( longStr, *databaseListTotal);
    xmlNewProp( root_node, BAD_CAST "databaseListTotal", BAD_CAST longStr );

    if ( userAttr->userStatus == NULL )
        xmlNewProp( root_node, BAD_CAST "userStatus", BAD_CAST "disable" );
    else xmlNewProp( root_node, BAD_CAST "userStatus", BAD_CAST userAttr->userStatus );

    if ( userAttr->mobileNumber != NULL )
        xmlNewProp( root_node, BAD_CAST "userStatus", BAD_CAST userAttr->mobileNumber );

    // set the root node
    xmlDocSetRootElement( doc, root_node );

    // if ( *xmlItemListAlarmTotal > *xmlItemListTotal ) *xmlItemListAlarmTotal = *xmlItemListTotal;

    for (subscript=1; subscript <= *databaseListTotal; subscript++){
        node = xmlNewNode( NULL, BAD_CAST "item" );
        xmlAddChild( root_node, node );

        // xitoa( longStr, subscript );
        // xmlNewProp( node, BAD_CAST "subscript", BAD_CAST longStr );

        sonNode = xmlNewNode( NULL, BAD_CAST "url" );
        content = xmlNewCDataBlock( NULL, BAD_CAST databaseList[subscript].url, strlen(databaseList[subscript].url) );
        xmlAddChild( sonNode, content );
        xmlAddChild( node, sonNode );

        sonNode = xmlNewNode( NULL, BAD_CAST "urlstatus" );
        content = xmlNewCDataBlock( NULL, BAD_CAST databaseList[subscript].urlstatus, strlen(databaseList[subscript].urlstatus) );
        xmlAddChild( sonNode, content );
        xmlAddChild( node, sonNode );

        sonNode = xmlNewNode( NULL, BAD_CAST "filenamePrefix" );
        content = xmlNewCDataBlock( NULL, BAD_CAST databaseList[subscript].filenamePrefix, strlen(databaseList[subscript].filenamePrefix) );
        xmlAddChild( sonNode, content );
        xmlAddChild( node, sonNode );
    }

    int nRel = xmlSaveFormatFileEnc( filename, doc, "UTF-8", 1);
    /*if (nRel != -1)
        printf(" created, %d bytes.\n", nRel);*/

    xmlFreeDoc(doc);

    if (nRel != -1) return 1;
    else return 0;
}
コード例 #2
0
ファイル: cdatasection.c プロジェクト: 0xhacking/php-src
/* {{{ proto void DOMCdataSection::__construct(string value); */
PHP_METHOD(domcdatasection, __construct)
{

	zval *id = getThis();
	xmlNodePtr nodep = NULL, oldnode = NULL;
	dom_object *intern;
	char *value = NULL;
	size_t value_len;

	if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s", &value, &value_len) == FAILURE) {
		return;
	}

	nodep = xmlNewCDataBlock(NULL, (xmlChar *) value, value_len);

	if (!nodep) {
		php_dom_throw_error(INVALID_STATE_ERR, 1);
		RETURN_FALSE;
	}

	intern = Z_DOMOBJ_P(id);
	oldnode = dom_object_get_node(intern);
	if (oldnode != NULL) {
		php_libxml_node_free_resource(oldnode );
	}
	php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern);
}
コード例 #3
0
ファイル: cdatasection.c プロジェクト: aholmes/php-src
/* {{{ proto void DOMCdataSection::__construct(string value); */
PHP_METHOD(domcdatasection, __construct)
{

	zval *id;
	xmlNodePtr nodep = NULL, oldnode = NULL;
	dom_object *intern;
	char *value = NULL;
	int value_len;
	zend_error_handling error_handling;

	zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling TSRMLS_CC);
	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_cdatasection_class_entry, &value, &value_len) == FAILURE) {
		zend_restore_error_handling(&error_handling TSRMLS_CC);
		return;
	}

	zend_restore_error_handling(&error_handling TSRMLS_CC);
	nodep = xmlNewCDataBlock(NULL, (xmlChar *) value, value_len);

	if (!nodep) {
		php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
		RETURN_FALSE;
	}

	intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
	if (intern != NULL) {
		oldnode = dom_object_get_node(intern);
		if (oldnode != NULL) {
			php_libxml_node_free_resource(oldnode  TSRMLS_CC);
		}
		php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
	}
}
コード例 #4
0
ファイル: parse_chat.c プロジェクト: cyisfor/htmlish
static
void craft_style(struct chatctx* ctx, xmlNode* head) {
	// do NOT use ctx->dest because it's in the input document...
	short id;
	// XXX: xmlNewTextLen?
	xmlNode* text = xmlNewCDataBlock(head->doc, NULL, 0);
	xmlNodeAddContentLen(text, LITLEN("\n"));
	/*
		these should go in a global stylesheet.
		xmlNodeAddContentLen(text, LITLEN(".chat  { border-collapse: collapse; }\n"));
		xmlNodeAddContentLen(text, LITLEN(".chat th { padding-right: 1ex; text-align: right; }\n"));
	*/

	char idbuf[0x100];
	char huebuf[0x100];
	char buf[0x100];



	for(id=0;id<ctx->nnames;++id) {

		int idlen = snprintf(idbuf,0x100,"%x",id);

		xmlNodeAddContentLen(text, LITLEN(".n"));
		xmlNodeAddContentLen(text, idbuf,idlen);

		xmlNodeAddContentLen(text, LITLEN(" th {\n  color: hsl("));
		srandom(ctx->names[id]);

		float hue = random() * 360.0 / RAND_MAX;
		float sat = random() * 40.0 / RAND_MAX + 40.0; // higher saturation
		float light = 30.0 + random() * 20.0 / RAND_MAX; // relatively dark

		int huelen = snprintf(huebuf,0x100,"%f",hue);

		xmlNodeAddContentLen(text, huebuf,huelen);

		xmlNodeAddContentLen(text, LITLEN(", "));
		xmlNodeAddContentLen(text, buf,
												 snprintf(buf,0x100,"%f",sat));
		xmlNodeAddContentLen(text, LITLEN("%, "));
		xmlNodeAddContentLen(text, buf,
												 snprintf(buf,0x100,"%f",light));
		xmlNodeAddContentLen(text, LITLEN("%);\n}\n"));

		// now the background

		xmlNodeAddContentLen(text, LITLEN(".n"));
		xmlNodeAddContentLen(text, idbuf,idlen);
		xmlNodeAddContentLen(text, LITLEN(" * {\n  background-color: hsl("));
		xmlNodeAddContentLen(text, huebuf,huelen);
		xmlNodeAddContentLen(text, LITLEN(", 100%,98%);\n}\n")); // very light
	}
	xmlNode* style = xmlNewNode(head->ns, "style");
	xmlAddChild(style,text);
	//printf("ummmmm %s\n",head->name);
	xmlAddChild(head, style);
}
コード例 #5
0
ファイル: xdoc.C プロジェクト: viatsko/parser3
// CDATASection createCDATASection(in DOMString data) raises(DOMException);
static void _createCDATASection(Request& r, MethodParams& params) {
	xmlChar* data=as_xmlchar(r, params, 0, XML_DATA_MUST_BE_STRING);

	VXdoc& vdoc=GET_SELF(r, VXdoc);
	xmlDoc& xmldoc=vdoc.get_xmldoc();

	xmlNode *node=xmlNewCDataBlock(&xmldoc, data, strlen((const char*)data));
	writeNode(r, vdoc, node);
}
コード例 #6
0
void
XmlBuilder::AddCData( const iStringT& data )
{
	check( doc_ != 0 || node_ != 0 );

	CvtTA<> cntA( data.CStr(), CP_UTF8 );

	xmlNodePtr cdata = xmlNewCDataBlock( doc_, (xmlChar*)cntA.str_, lstrlenA( cntA.str_ ) );
	check( cdata != 0 );

	if ( !xmlAddChild( node_, cdata ) ) throw XmlBuilderException();
}
コード例 #7
0
ファイル: output_xml.c プロジェクト: ClusterLabs/pacemaker
static void
xml_output_xml(pcmk__output_t *out, const char *name, const char *buf) {
    xmlNodePtr parent = NULL;
    xmlNodePtr cdata_node = NULL;
    xml_private_t *priv = out->priv;

    CRM_ASSERT(priv != NULL);

    parent = xmlNewChild(g_queue_peek_tail(priv->parent_q), NULL,
                         (pcmkXmlStr) name, NULL);
    cdata_node = xmlNewCDataBlock(getDocPtr(parent), (pcmkXmlStr) buf, strlen(buf));
    xmlAddChild(parent, cdata_node);
}
コード例 #8
0
ファイル: ruby_xml_node.c プロジェクト: nikitug/libxml-ruby
/*
 * call-seq:
 *    XML::Node.new_cdata(content = nil) -> XML::Node
 *
 * Create a new #CDATA node, optionally setting
 * the node's content.
 */
static VALUE rxml_node_new_cdata(int argc, VALUE *argv, VALUE klass)
{
  VALUE content = Qnil;
  xmlNodePtr xnode;

  rb_scan_args(argc, argv, "01", &content);

  if (NIL_P(content))
  {
    xnode = xmlNewCDataBlock(NULL, NULL, 0);
  }
  else
  {
    content = rb_obj_as_string(content);
    xnode = xmlNewCDataBlock(NULL, (xmlChar*) StringValuePtr(content),
        RSTRING_LEN(content));
  }

  if (xnode == NULL)
    rxml_raise(&xmlLastError);

  return rxml_node_wrap(xnode);
}
コード例 #9
0
ファイル: SXml.cpp プロジェクト: xjtukanif/ScribeTool
int SXmlNode::SetContentInCData(std::string value)
{
	if (!_node)
		return -1;
	xmlNodePtr new_node=NULL;
	xmlNodePtr new_root_node=xmlNewDocNode(NULL,0, _node->name,(const xmlChar *)"");
	new_node = xmlNewCDataBlock(NULL,(const xmlChar *) (value.c_str()), value.length());
	xmlAddChild(new_root_node,new_node);
	//xmlNodeSetName(new_node, _node->name);
	xmlReplaceNode(_node,new_root_node);
	xmlFreeNode(_node);	
	_node=new_root_node;	
	return 0;
}
コード例 #10
0
ファイル: child_node_list.cpp プロジェクト: zhengzhong/xtree
 xmlNode* child_node_list::create_cdata_(const std::string& value)
 {
     xmlNode* px = xmlNewCDataBlock( raw_->doc,
                                     detail::to_xml_chars(value.c_str()),
                                     static_cast<int>(value.size()) );
     if (px == 0)
     {
         std::string what = "fail to create libxml2 CData node for " + value;
         throw internal_dom_error(what);
     }
     else
     {
         return px;
     }
 }
コード例 #11
0
ファイル: xmlitem.c プロジェクト: kqdmqx/cliofetion-plus
int exportXmlItemFileForAlarm( const char * filename, struct xmlItemAlarm_t * xmlItemAlarmList, int * xmlItemListAlarmTotal ) {
    int subscript;
    char longStr[100000];
    char message[500];
    xmlNodePtr node;
    xmlNodePtr content;
    xmlNodePtr sonNode;
    xmlNodePtr grandsonNode;

    // create the doc and root node
    xmlDocPtr doc = xmlNewDoc( BAD_CAST "1.0" );
    xmlNodePtr root_node = xmlNewNode( NULL, BAD_CAST "xmlItemListAlarm" );

    xitoa( longStr, *xmlItemListAlarmTotal);
    xmlNewProp( root_node, BAD_CAST "xmlItemListAlarmTotal", BAD_CAST longStr );

    // set the root node
    xmlDocSetRootElement( doc, root_node );

    // if ( *xmlItemListAlarmTotal > *xmlItemListTotal ) *xmlItemListAlarmTotal = *xmlItemListTotal;

    for (subscript=1; subscript <= *xmlItemListAlarmTotal; subscript++) {
        node = xmlNewNode( NULL, BAD_CAST "item" );
        xmlAddChild( root_node, node );

        // xitoa( longStr, subscript );
        // xmlNewProp( node, BAD_CAST "subscript", BAD_CAST longStr );

        sonNode = xmlNewNode( NULL, BAD_CAST "message" );
        // content = xmlNewCDataBlock( NULL, BAD_CAST longStr, strlen(longStr) );
        // printf( "%s",longStr );
        content = xmlNewCDataBlock( NULL, BAD_CAST xmlItemAlarmList[subscript].message, strlen(xmlItemAlarmList[subscript].message) );
        xmlAddChild( sonNode, content );
        xmlAddChild( node, sonNode );
    }

    int nRel = xmlSaveFormatFileEnc( filename, doc, "UTF-8", 1);
    /*if (nRel != -1)
        printf(" created, %d bytes.\n", nRel);*/

    xmlFreeDoc(doc);

    if (nRel != -1) return 1;
    else return 0;
}
コード例 #12
0
void
RS_XML(cdataBlockHandler)(void *ctx, const xmlChar *value, int len)
{
 USER_OBJECT_ opArgs;
 RS_XMLParserData *parserData = (RS_XMLParserData*) ctx;
 DECL_ENCODING_FROM_EVENT_PARSER(parserData)

  if(parserData->current) {
      xmlAddChild(parserData->current, xmlNewCDataBlock(NULL, value, len));
      return;
  }

 PROTECT(opArgs = NEW_LIST(1));
 SET_VECTOR_ELT(opArgs, 0, NEW_CHARACTER(1));
   SET_STRING_ELT(VECTOR_ELT(opArgs, 0), 0, ENC_COPY_TO_USER_STRING(XMLCHAR_TO_CHAR(value)));
   RS_XML(callUserFunction)(HANDLER_FUN_NAME(parserData, "cdata"), (const char *)NULL, (RS_XMLParserData*)ctx, opArgs);
  UNPROTECT(1);
}
コード例 #13
0
void
XmlBuilder::AddCData( const uint8* ptr, uint32 size )
{
	static xmlChar hexN[] = "0123456789ABCDEF";
	check( doc_ != 0 || node_ != 0 );

	if ( size == 0 ) return;

	// convert to hex
	xmlChar* buff = new xmlChar[ size * 2 + 1 ];
	buff[ size*2 ] = 0;

	for( uint32 n = 0; n < size; n++ ) {
		buff[0+2*n] = hexN[ ptr[n] >> 4 ];
		buff[1+2*n] = hexN[ ptr[n] & 0x0f ];
	}

	xmlNodePtr cdata = xmlNewCDataBlock( doc_, buff, size * 2 );
	check( cdata != 0 );
	delete[] buff;

	if ( !xmlAddChild( node_, cdata ) ) throw XmlBuilderException();
}
コード例 #14
0
ファイル: xmlitem.c プロジェクト: glace/RSSReminder
int exportXmlItemFile( const char * filename, struct xmlItem_t * xmlItemList, int * xmlItemListTotal ){
    int subscript;
    int attrSubscript;
    char longStr[100000];
    xmlNodePtr node;
    xmlNodePtr content;
    xmlNodePtr sonNode;
    xmlNodePtr grandsonNode;

    // create the doc and root node
    xmlDocPtr doc = xmlNewDoc( BAD_CAST "1.0" );
    xmlNodePtr root_node = xmlNewNode( NULL, BAD_CAST "xmlItemList" );

    xitoa( longStr, *xmlItemListTotal );
    xmlNewProp( root_node, BAD_CAST "xmlItemListTotal", BAD_CAST longStr );

    // set the root node
    xmlDocSetRootElement( doc, root_node );

    if ( *xmlItemListTotal > MAX_ITEMLIST_SAVE ) *xmlItemListTotal = MAX_ITEMLIST_SAVE;
    

    for (subscript=1; subscript <= *xmlItemListTotal; subscript++){
        node = xmlNewNode( NULL, BAD_CAST "item" );
        xmlAddChild( root_node, node );

        // xitoa( longStr, subscript );
        // xmlNewProp( node, BAD_CAST "subscript", BAD_CAST longStr );

        if ( xmlItemList[subscript].text[FRSS_ITEM_TITLE] != NULL ){
            sonNode = xmlNewNode( NULL, BAD_CAST "title" );
            content = xmlNewCDataBlock( NULL, BAD_CAST xmlItemList[subscript].text[FRSS_ITEM_TITLE], strlen(xmlItemList[subscript].text[FRSS_ITEM_TITLE]) );
            xmlAddChild( sonNode, content );
            xmlAddChild( node, sonNode );
        }
        if ( xmlItemList[subscript].text[FRSS_ITEM_TIME] != NULL ){
            sonNode = xmlNewNode( NULL, BAD_CAST "time" );
            content = xmlNewCDataBlock( NULL, BAD_CAST xmlItemList[subscript].text[FRSS_ITEM_TIME], strlen(xmlItemList[subscript].text[FRSS_ITEM_TIME]) );
            xmlAddChild( sonNode, content );
            xmlAddChild( node, sonNode );
        }
        if ( xmlItemList[subscript].text[FRSS_ITEM_CONTENT] != NULL ){
            sonNode = xmlNewNode( NULL, BAD_CAST "content" );
            content = xmlNewCDataBlock( NULL, BAD_CAST xmlItemList[subscript].text[FRSS_ITEM_CONTENT], strlen(xmlItemList[subscript].text[FRSS_ITEM_CONTENT]) );
            xmlAddChild( sonNode, content );
            xmlAddChild( node, sonNode );
        }
        if ( xmlItemList[subscript].richText[FRSS_ITEM_CONTENT] != NULL ){
            sonNode = xmlNewNode( NULL, BAD_CAST "content:encoded" );
            content = xmlNewCDataBlock( NULL, BAD_CAST xmlItemList[subscript].richText[FRSS_ITEM_CONTENT], strlen(xmlItemList[subscript].richText[FRSS_ITEM_CONTENT]) );
            xmlAddChild( sonNode, content );
            xmlAddChild( node, sonNode );
        }
        if ( xmlItemList[subscript].text[FRSS_ITEM_GUID] != NULL ){
            sonNode = xmlNewNode( NULL, BAD_CAST "guid" );
            content = xmlNewCDataBlock( NULL, BAD_CAST xmlItemList[subscript].text[FRSS_ITEM_GUID], strlen(xmlItemList[subscript].text[FRSS_ITEM_GUID]) );
            xmlAddChild( sonNode, content );
            xmlAddChild( node, sonNode );
        }
    }

    int nRel = xmlSaveFormatFileEnc( filename, doc, "UTF-8", 1);
    /*if (nRel != -1)
        printf(" created, %d bytes.\n", nRel);*/

    xmlFreeDoc(doc);

    if (nRel != -1) return 1;
    else return 0;
}
コード例 #15
0
ファイル: xmlitem.c プロジェクト: glace/RSSReminder
int exportRuleFile( const char * filename, struct xmlDesc_t * xmlDesc ){
    int subscript;
    int subscriptCount;
    int attrSubscript;
    char longStr[100000];
    char * str;
    xmlNodePtr node;
    xmlNodePtr content;
    xmlNodePtr sonNode;
    xmlNodePtr grandsonNode;

    int strType;
    char title;
    char attrTitle[100];
    char attrValue[100];
    int attrTotal;
    int parent;
    int tail;

    // create the doc and root node
    xmlDocPtr doc = xmlNewDoc( BAD_CAST "1.0" );
    xmlNodePtr root_node = xmlNewNode( NULL, BAD_CAST "xmlItemDesc" );

    xmlNewProp( root_node, BAD_CAST "flag", BAD_CAST "standard");

    // set the root node
    xmlDocSetRootElement( doc, root_node );

    

    for (subscriptCount=1; subscriptCount <= 4; subscriptCount++){
        if (subscriptCount == 1) subscript = XML_ITEM_REGION;
        else if (subscriptCount == 2 ) subscript = XML_ITEM_TITLE;
        else if (subscriptCount == 3 ) subscript = XML_ITEM_TIME;
        else if (subscriptCount == 4 ) subscript = XML_ITEM_CONTENT;

        if ( xmlDesc[subscript].title == NULL && xmlDesc[subscript].attrTotal <= 0 ) continue;

        if ( subscript == XML_ITEM_REGION ) node = xmlNewNode( NULL, BAD_CAST "region" );
        else if ( subscript == XML_ITEM_TITLE) node = xmlNewNode( NULL, BAD_CAST "title" );
        else if ( subscript == XML_ITEM_TIME ) node = xmlNewNode( NULL, BAD_CAST "time" );
        else if ( subscript == XML_ITEM_CONTENT ) node = xmlNewNode( NULL, BAD_CAST "content" );
        xmlAddChild( root_node, node );

        // xitoa( longStr, subscript );
        // xmlNewProp( node, BAD_CAST "subscript", BAD_CAST longStr );

        // xitoa( longStr, itemList[subscript].type );
        // sonNode = xmlNewNode( NULL, BAD_CAST "type" );
        // content = xmlNewText( BAD_CAST longStr );
        // xmlAddChild( sonNode, content );
        // xmlAddChild( node, sonNode );

        if ( xmlDesc[subscript].title != NULL ){
            sonNode = xmlNewNode( NULL, BAD_CAST "title" );
            // strcpy( longStr, itemList[subscript].title );
            // pushCDATA( longStr );
            content = xmlNewCDataBlock( NULL, BAD_CAST xmlDesc[subscript].title, strlen(xmlDesc[subscript].title) );
            // content = xmlNewText( BAD_CAST itemList[subscript].attrValue[attrSubscript]);

            //         str= (char *)xmlNodeGetContent( content);
            // printf("%d:%d[%s]%s\n",subscript, strlen(xmlDesc[subscript].title), xmlDesc[subscript].title,str);
            xmlAddChild( sonNode, content );
            xmlAddChild( node, sonNode );
        }

        if ( xmlDesc[subscript].attrTotal > 0){
            sonNode = xmlNewNode( NULL, BAD_CAST "attr" );
            xitoa( longStr, xmlDesc[subscript].attrTotal );
            xmlNewProp( sonNode, BAD_CAST "attrTotal", BAD_CAST longStr);
            xmlAddChild( node, sonNode );

            for ( attrSubscript=0; attrSubscript < xmlDesc[subscript].attrTotal; attrSubscript++){
                xitoa( longStr, attrSubscript );
    
                grandsonNode = xmlNewNode( NULL, BAD_CAST "attrTitle");
                xmlNewProp( grandsonNode, BAD_CAST "attrSubscript", BAD_CAST longStr );
                content = xmlNewText( BAD_CAST xmlDesc[subscript].attrTitle[attrSubscript]);
                xmlAddChild( grandsonNode, content );
                xmlAddChild( sonNode, grandsonNode );

                grandsonNode = xmlNewNode( NULL, BAD_CAST "attrValue");
                xmlNewProp( grandsonNode, BAD_CAST "attrSubscript", BAD_CAST longStr );
                content = xmlNewText( BAD_CAST xmlDesc[subscript].attrValue[attrSubscript]);
                xmlAddChild( grandsonNode, content );
                xmlAddChild( sonNode, grandsonNode );
            }
        }
    }

    int nRel = xmlSaveFormatFileEnc( filename, doc, "UTF-8", 1);
    /*if (nRel != -1)
        printf(" created, %d bytes.\n", nRel);*/

    xmlFreeDoc(doc);

    if (nRel != -1) return 1;
    else return 0;
}
コード例 #16
0
ファイル: xml.cpp プロジェクト: zhenyouluo/GPL
bool gpl::xml::insertNodeByXPath(const char* nodeName, const char* nodeValue, int length /*= -1*/)
{
	if (m_xml->resource == NULL)
		return false;
	int len = strlen(nodeValue);
	if (length == 0 || len < length)
		return false;
	if (length == -1)
	{
		length = len;
	}
	//cout<<"resource->type:"<<m_xml->resource->type<<endl;
	switch (m_xml->resource->type)
	{
	case XPATH_NODESET://Object is a Node Set
		if (m_xml->resource->nodesetval == NULL)
			return false;
		xmlNodePtr cur, newNode;
		//取得第一个节点
		if ((cur = (*(m_xml->resource->nodesetval->nodeTab))) == NULL)
			return false;
		if (strlen(nodeName) == 0)
		{
			if (cur->children == NULL)
			{
				cur->children = xmlNewText((const xmlChar*)nodeValue);
				cur->last = cur->children;
				if (cur->last == NULL)
					return false;
			}
			else
				if (xmlTextConcat(cur->children, (const xmlChar *)nodeValue, length) < 0)
					return false;
		}
		else
		{
			if (strcmp(nodeName, XML_CDATA) == 0)
			{
				if ((newNode = xmlNewCDataBlock(m_xml->doc, (const xmlChar*)nodeValue, length)) == NULL)
					return false;
			}
			else
			{
				xmlNsPtr* ns = xmlGetNsList(m_xml->doc, cur);
				if ((newNode = xmlNewNode((ns == NULL ? NULL : (*ns)), (const xmlChar *)nodeName)) == NULL)
					return false;
				xmlNodeSetContent(newNode, (const xmlChar*)nodeValue);

			}
			//从最后的字节点位置进行追加
			if ((xmlAddChild(cur, newNode)) == NULL)
				return false;
		}
		break;
	case XPATH_XSLT_TREE://Object is an XSLT value tree
	case XPATH_BOOLEAN://Object is a Boolean
	case XPATH_NUMBER://Object is a number
	case XPATH_STRING://Object is a string
	case XPATH_POINT://Object is a point
	case XPATH_RANGE://是一个范围
	case XPATH_LOCATIONSET://Object is a Location Set
	case XPATH_USERS://Object is user defined
	case XPATH_UNDEFINED://Object is uninitialized
		return false;
		break;
	}
	return true;
}
コード例 #17
0
ファイル: xml_cdata.c プロジェクト: Bluejade/rots_consumer
#include <xml_cdata.h>

/*
 * call-seq:
 *  new(document, content)
 *
 * Create a new CData element on the +document+ with +content+
 */
static VALUE new(VALUE klass, VALUE doc, VALUE content)
{
  xmlDocPtr xml_doc;
  Data_Get_Struct(doc, xmlDoc, xml_doc);

  xmlNodePtr node = xmlNewCDataBlock(
      xml_doc,
      (const xmlChar *)StringValuePtr(content),
      RSTRING_LEN(content)
  );

  VALUE rb_node = Nokogiri_wrap_xml_node(node);

  if(rb_block_given_p()) rb_yield(rb_node);

  return rb_node;
}

VALUE cNokogiriXmlCData;
void init_xml_cdata()
{
  VALUE nokogiri = rb_define_module("Nokogiri");
  VALUE xml = rb_define_module_under(nokogiri, "XML");
コード例 #18
0
ファイル: xmldom.c プロジェクト: glace/RSSReminder
int exportXmlDom( const char * filename, struct itemnode_t * itemList, int * itemListTotal){
    int subscript;
    int attrSubscript;
    char longStr[100000];
    xmlNodePtr node;
    xmlNodePtr content;
    xmlNodePtr sonNode;
    xmlNodePtr grandsonNode;

    int strType;
    char title;
    char attrTitle[100];
    char attrValue[100];
    int attrTotal;
    int parent;
    int tail;

    // create the doc and root node
    xmlDocPtr doc = xmlNewDoc( BAD_CAST "1.0" );
    xmlNodePtr root_node = xmlNewNode( NULL, BAD_CAST "xmlDomList" );

    xitoa( longStr, *itemListTotal);
    xmlNewProp( root_node, BAD_CAST "itemListTotal", BAD_CAST longStr );

    // set the root node
    xmlDocSetRootElement( doc, root_node );

    

    for (subscript=1; subscript <= *itemListTotal; subscript++){
        node = xmlNewNode( NULL, BAD_CAST "item" );
        xmlAddChild( root_node, node );

        xitoa( longStr, subscript );
        xmlNewProp( node, BAD_CAST "subscript", BAD_CAST longStr );

        xitoa( longStr, itemList[subscript].type );
        sonNode = xmlNewNode( NULL, BAD_CAST "type" );
        content = xmlNewText( BAD_CAST longStr );
        xmlAddChild( sonNode, content );
        xmlAddChild( node, sonNode );

        sonNode = xmlNewNode( NULL, BAD_CAST "title" );
        // strcpy( longStr, itemList[subscript].title );
        // pushCDATA( longStr );
        content = xmlNewCDataBlock( NULL, BAD_CAST itemList[subscript].title, strlen(itemList[subscript].title) );
        xmlAddChild( sonNode, content );
        xmlAddChild( node, sonNode );

        sonNode = xmlNewNode( NULL, BAD_CAST "attr" );
        xitoa( longStr, itemList[subscript].attrTotal );
        xmlNewProp( sonNode, BAD_CAST "attrTotal", BAD_CAST longStr);
        xmlAddChild( node, sonNode );

        for ( attrSubscript=0; attrSubscript < itemList[subscript].attrTotal; attrSubscript++){
            xitoa( longStr, attrSubscript );

            grandsonNode = xmlNewNode( NULL, BAD_CAST "attrTitle");
            xmlNewProp( grandsonNode, BAD_CAST "attrSubscript", BAD_CAST longStr );
            content = xmlNewText( BAD_CAST itemList[subscript].attrTitle[attrSubscript]);
            xmlAddChild( grandsonNode, content );
            xmlAddChild( sonNode, grandsonNode );

            grandsonNode = xmlNewNode( NULL, BAD_CAST "attrValue");
            xmlNewProp( grandsonNode, BAD_CAST "attrSubscript", BAD_CAST longStr );
            content = xmlNewText( BAD_CAST itemList[subscript].attrValue[attrSubscript]);
            xmlAddChild( grandsonNode, content );
            xmlAddChild( sonNode, grandsonNode );
        }

        xitoa( longStr, itemList[subscript].parent );
        sonNode = xmlNewNode( NULL, BAD_CAST "parent" );
        content = xmlNewText( BAD_CAST longStr );
        xmlAddChild( sonNode, content );
        xmlAddChild( node, sonNode );

        xitoa( longStr, itemList[subscript].tail );
        sonNode = xmlNewNode( NULL, BAD_CAST "tail" );
        content = xmlNewText( BAD_CAST longStr );
        xmlAddChild( sonNode, content );
        xmlAddChild( node, sonNode );
    }

    int nRel = xmlSaveFormatFileEnc( filename, doc, "UTF-8", 1);
    /*if (nRel != -1)
        printf(" created, %d bytes.\n", nRel);*/

    xmlFreeDoc(doc);

    if (nRel != -1) return 1;
    else return 0;
}
コード例 #19
0
  xmlNodePtr node;
  VALUE doc;
  VALUE content;
  VALUE rest;
  VALUE rb_node;
  const xmlChar *content_str;
  int content_str_len;

  rb_scan_args(argc, argv, "2*", &doc, &content, &rest);

  Data_Get_Struct(doc, xmlDoc, xml_doc);

  content_str = NIL_P(content) ? NULL : (const xmlChar *)StringValueCStr(content);
  content_str_len = (content_str == NULL) ? 0 : strlen(content_str);

  node = xmlNewCDataBlock(xml_doc->doc, content_str, content_str_len);

  nokogiri_root_node(node);

  rb_node = Nokogiri_wrap_xml_node(klass, node);
  rb_obj_call_init(rb_node, argc, argv);

  if(rb_block_given_p()) { rb_yield(rb_node); }

  return rb_node;
}

VALUE cNokogiriXmlCData;
void init_xml_cdata()
{
  VALUE nokogiri = rb_define_module("Nokogiri");