本文整理汇总了C++中xml_isNode函数的典型用法代码示例。如果您正苦于以下问题:C++ xml_isNode函数的具体用法?C++ xml_isNode怎么用?C++ xml_isNode使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了xml_isNode函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: pfaction_load
/**
* @brief Loads the player's faction standings.
*
* @param parent Parent xml node to read from.
* @return 0 on success.
*/
int pfaction_load( xmlNodePtr parent )
{
xmlNodePtr node, cur;
char *str;
int faction;
node = parent->xmlChildrenNode;
do {
if (xml_isNode(node,"factions")) {
cur = node->xmlChildrenNode;
do {
if (xml_isNode(cur,"faction")) {
xmlr_attr(cur,"name",str);
faction = faction_get(str);
if (faction != -1) /* Faction is valid. */
faction_stack[faction].player = xml_getFloat(cur);
free(str);
}
} while (xml_nextNode(cur));
}
} while (xml_nextNode(node));
return 0;
}
示例2: pfaction_load
/**
* @brief Loads the player's faction standings.
*
* @param parent Parent xml node to read from.
* @return 0 on success.
*/
int pfaction_load( xmlNodePtr parent )
{
xmlNodePtr node, cur;
char *str;
int faction;
node = parent->xmlChildrenNode;
do {
if (xml_isNode(node,"factions")) {
cur = node->xmlChildrenNode;
do {
if (xml_isNode(cur,"faction")) {
xmlr_attr(cur,"name",str);
faction = faction_get(str);
if (faction != -1) { /* Faction is valid. */
/* Must not be static. */
if (!faction_isFlag( &faction_stack[faction], FACTION_STATIC ))
faction_stack[faction].player = xml_getFloat(cur);
}
free(str);
}
} while (xml_nextNode(cur));
}
} while (xml_nextNode(node));
return 0;
}
示例3: outfit_parseSMod
/**
* @brief Parses the modification tidbits of the outfit.
*
* @param temp Outfit to finish loading.
* @param parent Outfit's parent node.
*/
static void outfit_parseSMod( Outfit* temp, const xmlNodePtr parent )
{
xmlNodePtr node;
node = parent->children;
do { /* load all the data */
/* movement */
xmlr_float(node,"thrust",temp->u.mod.thrust);
xmlr_float(node,"turn",temp->u.mod.turn);
xmlr_float(node,"speed",temp->u.mod.speed);
/* health */
xmlr_float(node,"armour",temp->u.mod.armour);
xmlr_float(node,"shield",temp->u.mod.shield);
xmlr_float(node,"energy",temp->u.mod.energy);
xmlr_float(node,"fuel",temp->u.mod.fuel);
if (xml_isNode(node,"armour_regen"))
temp->u.mod.armour_regen = xml_getFloat(node)/60.0;
else if (xml_isNode(node,"shield_regen"))
temp->u.mod.shield_regen = xml_getFloat(node)/60.0;
else if (xml_isNode(node,"energy_regen"))
temp->u.mod.energy_regen = xml_getFloat(node)/60.0;
/* misc */
xmlr_int(node,"cargo",temp->u.mod.cargo);
} while (xml_nextNode(node));
}
示例4: faction_parseSocial
/**
* @brief Parses the social tidbits of a faction: allies and enemies.
*
* @param parent Node containing the faction.
*/
static void faction_parseSocial( xmlNodePtr parent )
{
xmlNodePtr node, cur;
char *buf;
Faction *base;
int mod;
int mem;
buf = xml_nodeProp(parent,"name");
base = &faction_stack[faction_get(buf)];
free(buf);
node = parent->xmlChildrenNode;
do {
/* Grab the allies */
if (xml_isNode(node,"allies")) {
cur = node->xmlChildrenNode;
mem = 0;
do {
if (xml_isNode(cur,"ally")) {
mod = faction_get(xml_get(cur));
base->nallies++;
if (base->nallies > mem) {
mem += CHUNK_SIZE;
base->allies = realloc(base->allies, sizeof(int)*mem);
}
base->allies[base->nallies-1] = mod;
}
} while (xml_nextNode(cur));
if (base->nallies > 0)
base->allies = realloc(base->allies, sizeof(int)*base->nallies);
}
/* Grab the enemies */
if (xml_isNode(node,"enemies")) {
cur = node->xmlChildrenNode;
mem = 0;
do {
if (xml_isNode(cur,"enemy")) {
mod = faction_get(xml_get(cur));
base->nenemies++;
if (base->nenemies > mem) {
mem += CHUNK_SIZE;
base->enemies = realloc(base->enemies, sizeof(int)*mem);
}
base->enemies[base->nenemies-1] = mod;
}
} while (xml_nextNode(cur));
if (base->nenemies > 0)
base->enemies = realloc(base->enemies, sizeof(int)*base->nenemies);
}
} while (xml_nextNode(node));
}
示例5: dtype_load
/**
* @brief Loads the dtype stack.
*
* @return 0 on success.
*/
int dtype_load (void)
{
int mem;
uint32_t bufsize;
char *buf;
xmlNodePtr node;
xmlDocPtr doc;
/* Load and read the data. */
buf = ndata_read( DTYPE_DATA, &bufsize );
doc = xmlParseMemory( buf, bufsize );
/* Check to see if document exists. */
node = doc->xmlChildrenNode;
if (!xml_isNode(node,DTYPE_XML_ID)) {
ERR("Malformed '"DTYPE_DATA"' file: missing root element '"DTYPE_XML_ID"'");
return -1;
}
/* Check to see if is populated. */
node = node->xmlChildrenNode; /* first system node */
if (node == NULL) {
ERR("Malformed '"DTYPE_DATA"' file: does not contain elements");
return -1;
}
/* Load up the individual damage types. */
mem = 0;
do {
xml_onlyNodes(node);
if (!xml_isNode(node,DTYPE_XML_TAG)) {
WARN("'"DTYPE_DATA"' has unknown node '%s'.", node->name);
continue;
}
dtype_ntypes++;
if (dtype_ntypes > mem) {
if (mem == 0)
mem = DTYPE_CHUNK_MIN;
else
mem *= 2;
dtype_types = realloc(dtype_types, sizeof(DTYPE)*mem);
}
DTYPE_parse( &dtype_types[dtype_ntypes-1], node );
} while (xml_nextNode(node));
/* Shrink back to minimum - shouldn't change ever. */
dtype_types = realloc(dtype_types, sizeof(DTYPE) * dtype_ntypes);
/* Clean up. */
xmlFreeDoc(doc);
free(buf);
return 0;
}
示例6: spfx_load
/**
* @brief Loads the spfx stack.
*
* @return 0 on success.
*
* @todo Make spfx not hardcoded.
*/
int spfx_load (void)
{
int mem;
uint32_t bufsize;
char *buf;
xmlNodePtr node;
xmlDocPtr doc;
/* Load and read the data. */
buf = ndata_read( SPFX_DATA, &bufsize );
doc = xmlParseMemory( buf, bufsize );
/* Check to see if document exists. */
node = doc->xmlChildrenNode;
if (!xml_isNode(node,SPFX_XML_ID)) {
ERR("Malformed '"SPFX_DATA"' file: missing root element '"SPFX_XML_ID"'");
return -1;
}
/* Check to see if is populated. */
node = node->xmlChildrenNode; /* first system node */
if (node == NULL) {
ERR("Malformed '"SPFX_DATA"' file: does not contain elements");
return -1;
}
/* First pass, loads up ammunition. */
mem = 0;
do {
if (xml_isNode(node,SPFX_XML_TAG)) {
spfx_neffects++;
if (spfx_neffects > mem) {
mem += CHUNK_SIZE;
spfx_effects = realloc(spfx_effects, sizeof(SPFX_Base)*mem);
}
spfx_base_parse( &spfx_effects[spfx_neffects-1], node );
}
} while (xml_nextNode(node));
/* Shrink back to minimum - shouldn't change ever. */
spfx_effects = realloc(spfx_effects, sizeof(SPFX_Base) * spfx_neffects);
/* Clean up. */
xmlFreeDoc(doc);
free(buf);
/*
* Now initialize force feedback.
*/
spfx_hapticInit();
return 0;
}
示例7: missions_load
/**
* @brief Loads all the mission data.
*
* @return 0 on success.
*/
int missions_load (void)
{
int i, m;
uint32_t bufsize;
char *buf;
for (i=0; i<MISSION_MAX; i++)
player_missions[i] = calloc(1, sizeof(Mission));
buf = ndata_read( MISSION_DATA_PATH, &bufsize );
xmlNodePtr node;
xmlDocPtr doc = xmlParseMemory( buf, bufsize );
node = doc->xmlChildrenNode;
if (!xml_isNode(node,XML_MISSION_ID)) {
ERR("Malformed '"MISSION_DATA_PATH"' file: missing root element '"XML_MISSION_ID"'");
return -1;
}
node = node->xmlChildrenNode; /* first mission node */
if (node == NULL) {
ERR("Malformed '"MISSION_DATA_PATH"' file: does not contain elements");
return -1;
}
m = 0;
do {
if (xml_isNode(node,XML_MISSION_TAG)) {
/* See if must grow. */
mission_nstack++;
if (mission_nstack > m) {
m += MISSION_CHUNK;
mission_stack = realloc(mission_stack, sizeof(MissionData)*m);
}
/* Load it. */
mission_parse( &mission_stack[mission_nstack-1], node );
}
} while (xml_nextNode(node));
/* Shrink to minimum. */
mission_stack = realloc(mission_stack, sizeof(MissionData)*mission_nstack);
/* Clean up. */
xmlFreeDoc(doc);
free(buf);
DEBUG("Loaded %d Mission%s", mission_nstack, (mission_nstack==1) ? "" : "s" );
return 0;
}
示例8: outfit_load
/**
* @brief Loads all the outfits.
*
* @return 0 on success.
*/
int outfit_load (void)
{
int i, mem;
uint32_t bufsize;
char *buf = ndata_read( OUTFIT_DATA, &bufsize );
xmlNodePtr node;
xmlDocPtr doc = xmlParseMemory( buf, bufsize );
node = doc->xmlChildrenNode;
if (!xml_isNode(node,XML_OUTFIT_ID)) {
ERR("Malformed '"OUTFIT_DATA"' file: missing root element '"XML_OUTFIT_ID"'");
return -1;
}
node = node->xmlChildrenNode; /* first system node */
if (node == NULL) {
ERR("Malformed '"OUTFIT_DATA"' file: does not contain elements");
return -1;
}
/* First pass, loads up ammunition. */
mem = 0;
do {
if (xml_isNode(node,XML_OUTFIT_TAG)) {
outfit_nstack++;
if (outfit_nstack > mem) {
mem += CHUNK_SIZE;
outfit_stack = realloc(outfit_stack, sizeof(Outfit)*mem);
}
outfit_parse( &outfit_stack[outfit_nstack-1], node );
}
} while (xml_nextNode(node));
/* Shrink back to minimum - shouldn't change ever. */
outfit_stack = realloc(outfit_stack, sizeof(Outfit) * outfit_nstack);
/* Second pass, sets up ammunition relationships. */
for (i=0; i<outfit_nstack; i++) {
if (outfit_isLauncher(&outfit_stack[i]))
outfit_stack[i].u.lau.ammo = outfit_get( outfit_stack[i].u.lau.ammo_name );
else if (outfit_isFighterBay(&outfit_stack[i]))
outfit_stack[i].u.bay.ammo = outfit_get( outfit_stack[i].u.bay.ammo_name );
}
xmlFreeDoc(doc);
free(buf);
DEBUG("Loaded %d Outfit%s", outfit_nstack, (outfit_nstack==1) ? "" : "s" );
return 0;
}
示例9: faction_parse
/**
* @brief Parses a single faction, but doesn't set the allies/enemies bit.
*
* @param temp Faction to load data into.
* @param parent Parent node to extract faction from.
* @return Faction created from parent node.
*/
static int faction_parse( Faction* temp, xmlNodePtr parent )
{
xmlNodePtr node;
int player;
char buf[PATH_MAX];
/* Clear memory. */
memset( temp, 0, sizeof(Faction) );
temp->name = xml_nodeProp(parent,"name");
if (temp->name == NULL) WARN("Faction from "FACTION_DATA" has invalid or no name");
player = 0;
node = parent->xmlChildrenNode;
do {
/* Can be 0 or negative, so we have to take that into account. */
if (xml_isNode(node,"player")) {
temp->player_def = xml_getFloat(node);
player = 1;
continue;
}
xmlr_strd(node,"longname",temp->longname);
if (xml_isNode(node, "colour"))
temp->colour = col_fromName(xml_raw(node));
if (xml_isNode(node,"logo")) {
snprintf( buf, PATH_MAX, FACTION_LOGO_PATH"%s_small.png", xml_get(node));
temp->logo_small = gl_newImage(buf, 0);
continue;
}
if (xml_isNode(node,"static")) {
faction_setFlag(temp, FACTION_STATIC);
continue;
}
if (xml_isNode(node,"invisible")) {
faction_setFlag(temp, FACTION_INVISIBLE);
continue;
}
} while (xml_nextNode(node));
if (player==0)
DEBUG("Faction '%s' missing player tag.", temp->name);
return 0;
}
示例10: claim_create
/**
* @brief Loads a claim.
*
* @param parent Parent node containing the claim data.
* @return The system claim.
*/
SysClaim_t *claim_xmlLoad( xmlNodePtr parent )
{
SysClaim_t *claim;
xmlNodePtr node;
StarSystem *sys;
/* Create the claim. */
claim = claim_create();
/* Load the nodes. */
node = parent->xmlChildrenNode;
do {
if (xml_isNode(node,"sys")) {
sys = system_get( xml_get(node) );
if (sys != NULL)
claim_add( claim, system_index(sys) );
else
WARN("System Claim trying to load system '%s' which doesn't exist.", xml_get(node));
}
} while (xml_nextNode(node));
/* Activate the claim. */
claim_activate( claim );
return claim;
}
示例11: spfx_base_parse
/**
* @brief Parses an xml node containing a SPFX.
*
* @param temp Address to load SPFX into.
* @param parent XML Node containing the SPFX data.
* @return 0 on success.
*/
static int spfx_base_parse( SPFX_Base *temp, const xmlNodePtr parent )
{
xmlNodePtr node;
/* Clear data. */
memset( temp, 0, sizeof(SPFX_Base) );
/* Get the name (mallocs). */
temp->name = xml_nodeProp(parent,"name");
/* Extract the data. */
node = parent->xmlChildrenNode;
do {
xmlr_float(node, "anim", temp->anim);
xmlr_float(node, "ttl", temp->ttl);
if (xml_isNode(node,"gfx"))
temp->gfx = xml_parseTexture( node,
SPFX_GFX_PRE"%s"SPFX_GFX_SUF, 6, 5, 0 );
} while (xml_nextNode(node));
/* Convert from ms to s. */
temp->anim /= 1000.;
temp->ttl /= 1000.;
if (temp->ttl == 0.)
temp->ttl = temp->anim;
#define MELEMENT(o,s) \
if (o) WARN("SPFX '%s' missing/invalid '"s"' element", temp->name) /**< Define to help check for data errors. */
MELEMENT(temp->anim==0.,"anim");
MELEMENT(temp->ttl==0.,"ttl");
MELEMENT(temp->gfx==NULL,"gfx");
#undef MELEMENT
return 0;
}
示例12: commodity_load
/**
* @brief Loads all the commodity data.
*
* @return 0 on success.
*/
int commodity_load (void)
{
uint32_t bufsize;
char *buf;
xmlNodePtr node;
xmlDocPtr doc;
/* Load the file. */
buf = ndata_read( COMMODITY_DATA, &bufsize);
if (buf == NULL)
return -1;
/* Handle the XML. */
doc = xmlParseMemory( buf, bufsize );
if (doc == NULL) {
WARN("'%s' is not valid XML.", COMMODITY_DATA);
return -1;
}
node = doc->xmlChildrenNode; /* Commoditys node */
if (strcmp((char*)node->name,XML_COMMODITY_ID)) {
ERR("Malformed "COMMODITY_DATA" file: missing root element '"XML_COMMODITY_ID"'");
return -1;
}
node = node->xmlChildrenNode; /* first faction node */
if (node == NULL) {
ERR("Malformed "COMMODITY_DATA" file: does not contain elements");
return -1;
}
do {
if (xml_isNode(node, XML_COMMODITY_TAG)) {
/* Make room for commodity. */
commodity_stack = realloc(commodity_stack,
sizeof(Commodity)*(++commodity_nstack));
/* Load commodity. */
commodity_parse(&commodity_stack[commodity_nstack-1], node);
/* See if should get added to commodity list. */
if (commodity_stack[commodity_nstack-1].price > 0.) {
econ_nprices++;
econ_comm = realloc(econ_comm, econ_nprices * sizeof(int));
econ_comm[econ_nprices-1] = commodity_nstack-1;
}
}
} while (xml_nextNode(node));
xmlFreeDoc(doc);
free(buf);
DEBUG("Loaded %d Commodit%s", commodity_nstack, (commodity_nstack==1) ? "y" : "ies" );
return 0;
}
示例13: diff_apply
/**
* @brief Applies a diff to the universe.
*
* @param name Diff to apply.
* @return 0 on success.
*/
int diff_apply( const char *name )
{
xmlNodePtr node;
xmlDocPtr doc;
size_t bufsize;
char *buf;
char *diffname;
/* Check if already applied. */
if (diff_isApplied(name))
return 0;
buf = ndata_read( DIFF_DATA_PATH, &bufsize );
doc = xmlParseMemory( buf, bufsize );
node = doc->xmlChildrenNode;
if (strcmp((char*)node->name,"unidiffs")) {
ERR(_("Malformed unidiff file: missing root element 'unidiffs'"));
return 0;
}
node = node->xmlChildrenNode; /* first system node */
if (node == NULL) {
ERR(_("Malformed unidiff file: does not contain elements"));
return 0;
}
do {
if (xml_isNode(node,"unidiff")) {
/* Check to see if it's the diff we're looking for. */
xmlr_attr(node,"name",diffname);
if (strcmp(diffname,name)==0) {
/* Apply it. */
diff_patch( node );
/* Clean up. */
free(diffname);
xmlFreeDoc(doc);
free(buf);
economy_execQueued();
return 0;
}
free(diffname);
}
} while (xml_nextNode(node));
/* More clean up. */
xmlFreeDoc(doc);
free(buf);
WARN(_("UniDiff '%s' not found in %s."), name, DIFF_DATA_PATH);
return -1;
}
示例14: diff_load
/**
* @brief Loads the diffs.
*
* @param parent Parent node containing diffs.
* @return 0 on success.
*/
int diff_load( xmlNodePtr parent )
{
xmlNodePtr node, cur;
diff_clear();
node = parent->xmlChildrenNode;
do {
if (xml_isNode(node,"diffs")) {
cur = node->xmlChildrenNode;
do {
if (xml_isNode(cur,"diff"))
diff_apply( xml_get(cur) );
} while (xml_nextNode(cur));
}
} while (xml_nextNode(node));
return 0;
}
示例15: outfit_parseSAfterburner
/**
* @brief Parses the afterburner tidbits of the outfit.
*
* @param temp Outfit to finish loading.
* @param parent Outfit's parent node.
*/
static void outfit_parseSAfterburner( Outfit* temp, const xmlNodePtr parent )
{
xmlNodePtr node;
node = parent->children;
/* must be >= 1. */
temp->u.afb.thrust_perc = 1.;
temp->u.afb.speed_perc = 1.;
do { /* parse the data */
xmlr_float(node,"rumble",temp->u.afb.rumble);
if (xml_isNode(node,"sound"))
temp->u.afb.sound = sound_get( xml_get(node) );
if (xml_isNode(node,"thrust_perc"))
temp->u.afb.thrust_perc = 1. + xml_getFloat(node)/100.;
xmlr_float(node,"thrust_abs",temp->u.afb.thrust_abs);
if (xml_isNode(node,"speed_perc"))
temp->u.afb.speed_perc = 1. + xml_getFloat(node)/100.;
xmlr_float(node,"speed_abs",temp->u.afb.speed_abs);
xmlr_float(node,"energy",temp->u.afb.energy);
} while (xml_nextNode(node));
}