本文整理汇总了C++中DOMElement::hasChildNodes方法的典型用法代码示例。如果您正苦于以下问题:C++ DOMElement::hasChildNodes方法的具体用法?C++ DOMElement::hasChildNodes怎么用?C++ DOMElement::hasChildNodes使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DOMElement
的用法示例。
在下文中一共展示了DOMElement::hasChildNodes方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
//.........这里部分代码省略.........
DOMText *includedText = NULL;
DOMDocument *includedDoc = NULL;
if (XMLString::equals(parse, XIncludeUtils::fgXIIncludeParseAttrXMLValue)){
/* including a XML element */
includedDoc = doXIncludeXMLFileDOM(hrefLoc.getLocation(), relativeLocation.getLocation(), xincludeNode, parsedDocument, entityResolver);
} else if (XMLString::equals(parse, XIncludeUtils::fgXIIncludeParseAttrTextValue)){
/* including a text value */
includedText = doXIncludeTEXTFileDOM(hrefLoc.getLocation(), relativeLocation.getLocation(), encoding, xincludeNode, parsedDocument, entityResolver);
} else {
/* invalid parse attribute value - fatal error according to the specification */
XIncludeUtils::reportError(xincludeNode, XMLErrs::XIncludeInvalidParseVal,
parse, parsedDocument->getDocumentURI());
return false;
}
RefVectorOf<DOMNode> delayedProcessing(12,false);
if (includedDoc == NULL && includedText == NULL){
/* there was an error - this is now a resource error
let's see if there is a fallback */
XIncludeUtils::reportError(xincludeNode, XMLErrs::XIncludeIncludeFailedResourceError,
hrefLoc.getLocation(), parsedDocument->getDocumentURI());
if (includeParent == NULL){
includeParent = parsedDocument;
}
// we could be getting errors trying to insert elements at the root of the document, so we should use replaceChild;
// in order to handle multiple nodes, add them to a document fragment and use that to replace the original node
if (fallback){
/* baseURI fixups - see http://www.w3.org/TR/xinclude/#base for details. */
XMLUri parentURI(includeParent->getBaseURI());
XMLUri includedURI(fallback->getBaseURI());
if (fallback->hasChildNodes()){
DOMDocumentFragment* frag = parsedDocument->createDocumentFragment();
DOMNode *child = fallback->getFirstChild();
/* add the content of the fallback element, and remove the fallback elem itself */
for ( ; child != NULL ; child=child->getNextSibling()){
if (child->getNodeType() == DOMNode::DOCUMENT_TYPE_NODE){
continue;
}
DOMNode *newNode = parsedDocument->importNode(child, true);
/* if the paths differ we need to add a base attribute */
if (newNode->getNodeType()==DOMNode::ELEMENT_NODE && !XMLString::equals(parentURI.getPath(), includedURI.getPath())){
if (getBaseAttrValue(newNode) == NULL){
/* need to calculate the proper path difference to get the relativePath */
((DOMElement*)newNode)->setAttribute(fgXIBaseAttrName, getBaseAttrValue(fallback->getParentNode()));
} else {
/* the included node has base of its own which takes precedence */
XIncludeLocation xil(getBaseAttrValue(newNode));
if (getBaseAttrValue(fallback->getParentNode()) != NULL){
/* prepend any specific base modification of the xinclude node */
xil.prependPath(getBaseAttrValue(fallback->getParentNode()));
}
((DOMElement*)newNode)->setAttribute(fgXIBaseAttrName, xil.getLocation());
}
}
DOMNode *newChild = frag->appendChild(newNode);
// don't process the node now, wait until it is placed in the final position
delayedProcessing.addElement(newChild);
//parseDOMNodeDoingXInclude(newChild, parsedDocument, entityResolver);
}
includeParent->replaceChild(frag, xincludeNode);
frag->release();
for(XMLSize_t i=0;i<delayedProcessing.size();i++)
示例2: FormatProtoItem
/*!
\brief It gets a list of DOM nodes containing a protocol, and formats them into _nbPDMLProto structures.
This function converts each protocol and all its child fields. This function will call the FormatFieldsItem()
for this purpose.
\param PDMLDocument The DOMDocument associated to the current PDML packet.
\return The number of '<proto>' that have been copied in the returned buffer,
nbFAILURE if some error occurred.
The error message is stored in the m_errbuf internal buffer.
*/
int CPDMLReader::FormatProtoItem(DOMDocument *PDMLDocument)
{
DOMNodeList *ProtoList;
XMLCh TempBuffer[NETPDL_MAX_STRING + 1];
unsigned int ProtoNumber;
unsigned int TotNumProto;
XMLString::transcode(PDML_PROTO, TempBuffer, NETPDL_MAX_STRING);
// After parsing the '<packet>' fragment, let's list the <proto> contained into it
ProtoList= PDMLDocument->getElementsByTagName(TempBuffer);
// Get the number of protocols contained in this packet
TotNumProto= ProtoList->getLength();
// Check if the protocol structures allocated previously are enough. If not, let's allocate new structures
if (TotNumProto >= m_maxNumProto)
{
if (UpdateProtoList(&m_maxNumProto, &m_protoList, m_errbuf, sizeof(m_errbuf)) == nbFAILURE)
return nbFAILURE;
}
// Reset the buffer
m_asciiBuffer.ClearBuffer(false /* resizing not permitted */);
for (ProtoNumber= 0; ProtoNumber < TotNumProto; ProtoNumber++)
{
DOMElement *ProtoItem;
// Set everything to zero
memset(m_protoList[ProtoNumber], 0, sizeof(_nbPDMLProto));
// Update pointer to the packet summary
m_protoList[ProtoNumber]->PacketSummary= &m_packetSummary;
// Updates the protocol chain
if (ProtoNumber >= 1)
{
m_protoList[ProtoNumber - 1]->NextProto= m_protoList[ProtoNumber];
m_protoList[ProtoNumber]->PreviousProto= m_protoList[ProtoNumber - 1];
}
ProtoItem= (DOMElement *) ProtoList->item(ProtoNumber);
// Copies all the attributes of this proto in the new structure
if (AppendItemString(ProtoItem, PDML_FIELD_ATTR_NAME,
&(m_protoList[ProtoNumber]->Name), &m_asciiBuffer, m_errbuf, sizeof(m_errbuf)) == nbFAILURE)
return nbFAILURE;
if (AppendItemString(ProtoItem, PDML_FIELD_ATTR_LONGNAME,
&(m_protoList[ProtoNumber]->LongName), &m_asciiBuffer, m_errbuf, sizeof(m_errbuf)) == nbFAILURE)
return nbFAILURE;
if (AppendItemLong(ProtoItem, PDML_FIELD_ATTR_SIZE,
&(m_protoList[ProtoNumber]->Size), m_errbuf, sizeof(m_errbuf)) == nbFAILURE)
return nbFAILURE;
if (AppendItemLong(ProtoItem, PDML_FIELD_ATTR_POSITION,
&(m_protoList[ProtoNumber]->Position), m_errbuf, sizeof(m_errbuf)) == nbFAILURE)
return nbFAILURE;
#ifdef DOM_DEBUG
// FULVIO This code is still present, because it should be needed in order to solve
// a bug discovered on Dec 4, 2006
// See my email in the mailbox
// get a serializer, an instance of DOMWriter
XMLCh tempStr[100];
XMLString::transcode("LS", tempStr, 99);
DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(tempStr);
DOMWriter *theSerializer = ((DOMImplementationLS*)impl)->createDOMWriter();
MemBufFormatTarget myFormTarget;
theSerializer->writeNode(&myFormTarget, *ProtoItem);
const XMLByte *Result= myFormTarget.getRawBuffer();
delete theSerializer;
#endif
if (ProtoItem->hasChildNodes() )
{
if (FormatFieldNodes(ProtoItem->getFirstChild(), m_protoList[ProtoNumber], NULL) == nbFAILURE)
return nbFAILURE;
}
}
// Update the pointer to the first protocol
if (TotNumProto > 0)
m_packetSummary.FirstProto= m_protoList[0];
//.........这里部分代码省略.........
示例3: processArmor
Armor* ItemDataLoader::processArmor(DOMElement* armorXml)
{
// Itemname
CeGuiString name = XmlHelper::getAttributeValueAsString(armorXml,"Name");
// Beschreibung
CeGuiString desc = XmlHelper::getAttributeValueAsString(armorXml,"Beschreibung");
// Eindeutiger Zuordner
CeGuiString id = XmlHelper::getAttributeValueAsString(armorXml,"ID");
// Image fürs Inventar
CeGuiString imageName = XmlHelper::getValueAsString(XmlHelper::getChildNamed(armorXml, "Bildname"));
// Mesh für das Spiel
DOMElement* meshNode = XmlHelper::getChildNamed(armorXml, "Mesh");
CeGuiString mesh = "";
if (meshNode->hasChildNodes())
{
mesh = XmlHelper::getValueAsString(meshNode);
}
CeGuiString typeString = XmlHelper::getValueAsString(XmlHelper::getChildNamed(armorXml, "Klasse"));
Item::ItemType type = static_cast<Item::ItemType>(getItemTypeFromString(typeString));
// Größe im Inventar
int size_x = XmlHelper::getAttributeValueAsInteger(XmlHelper::getChildNamed(armorXml, "Größe"),"X");
int size_y = XmlHelper::getAttributeValueAsInteger(XmlHelper::getChildNamed(armorXml, "Größe"),"Y");
// Containerplatz für andere Gegenstände, die dieser aufnahmen kann
int place_x = XmlHelper::getAttributeValueAsInteger(XmlHelper::getChildNamed(armorXml, "Platz"),"X");
int place_y = XmlHelper::getAttributeValueAsInteger(XmlHelper::getChildNamed(armorXml, "Platz"),"Y");
// Rüstungsschutz für bestimmte Zonen
int ko = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Ko"));
int br = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Br"));
int rue = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Rü"));
int ba = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Ba"));
int la = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "LA"));
int ra = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "RA"));
int lb = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "LB"));
int rb = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "RB"));
int ges = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Ges."));
int grs = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "gRs"));
int gbe = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "gBe"));
int gewicht = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Gewicht"));
int preis = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Preis"));
// Neuen Rüstungsprototyp erzeugen und zurückgeben
Armor* a = new Armor(
name,
desc
);
a->setImageName(imageName);
a->setMeshName(mesh);
a->setItemType(type);
a->setSize(size_x,size_y);
if (place_x > 0 && place_y > 0)
{
a->setContainer(true,make_pair<int,int>(place_x,place_y));
}
a->setKo(ko);
a->setBr(br);
a->setRue(rue);
a->setBa(ba);
a->setLA(la);
a->setRA(ra);
a->setLB(lb);
a->setRB(rb);
a->setGes(ges);
a->setGRS(grs);
a->setGBE(gbe);
// Umrechnung Stein->Unzen = Mal 40
a->setWeight(gewicht * 40);
a->setPrice(preis);
return a;
}
示例4: main
XERCES_CPP_NAMESPACE_USE
int main( int argc, char *argv[] )
{
std::cout << "****************************" << std::endl;
std::cout << "XML DOM PARSER PLAY" << std::endl;
std::cout << "****************************" << std::endl;
try
{
XMLPlatformUtils::Initialize();
}
catch( const XMLException& ex )
{
std::cerr << "error with xml initialisation:" << ex.getMessage() << std::endl;
return 1;
}
std::cout << "Building parser ..." << std::endl;
XercesDOMParser* parser = new XercesDOMParser();
if( !parser )
{
std::cerr << "no parser" << std::endl;
return 1;
}
parser->setValidationScheme(XercesDOMParser::Val_Always);
parser->setDoNamespaces(false);
parser->setDoSchema(false);
parser->setCreateEntityReferenceNodes(false);
std::cout << "Building error handler" << std::endl;
ErrorHandler* errHandler = dynamic_cast<ErrorHandler*>(new HandlerBase());
if( errHandler == 0 )
{
std::cerr << "ibad cast" << std::endl;
return 1;
}
if( errHandler == 0 )
{
std::cerr << "error with errorhandler caszting:" << std::endl;
return 1;
}
parser->setErrorHandler(errHandler);
char* xmlFile = "/home/suggitpe/test/RPMS/config/rpms_config.xml";
try
{
parser->parse(xmlFile);
if( parser->getErrorCount() == 0 )
{
std::cerr << "errors in parsing" << std::endl;
return 1;
}
DOMDocument * doc = parser->getDocument();
if( doc->hasChildNodes() )
{
std::cout << "Num nodes: " << doc->getChildNodes()->getLength() << std::endl;
for( int i = 0; i < doc->getChildNodes()->getLength();++i )
{
cout << "\t" << i << " type: " << doc->getChildNodes()->item(i)->getNodeType() << endl;
if( doc->getChildNodes()->item(i)->getNodeType() == 1 )
{
DOMElement *e = dynamic_cast<DOMElement*>(doc->getChildNodes()->item(i));
if( !e ) { cerr << "bad cast" << endl; }
if( e->hasChildNodes() )
{
cout << "\t\telement found with " << e->getChildNodes()->getLength() << " nodes"<< endl;
}
else
{
cout << "No child nodes" << endl;
}
}
}
cout << "now for the other way" << endl;
XMLCh * name = XMLString::transcode("system_components");
DOMNodeList *list = doc->getDocumentElement()->getElementsByTagName( name );
XMLString::release(&name);
std::cout << "Got list [" << list->getLength() << "]" << std::endl;
for( XMLSize_t i =0; i < list->getLength(); ++i )
{
std::cout << "." << std::endl;
}
}
else
{
std::cout << "no child nodes" << std::endl;
}
}
catch( const XMLException& ex )
{
std::cerr << "error with xml parser:" << ex.getMessage() << std::endl;
return 1;
}
catch( const DOMException& dex )
{
std::cerr << "error with xml parser:" << dex.msg << std::endl;
//.........这里部分代码省略.........