Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Professional C++ [eng].pdf
Скачиваний:
284
Добавлен:
16.08.2013
Размер:
11.09 Mб
Скачать

Chapter 26

vector<ParsedXMLElement*> result;

DOMNodeList* children = mElement->getChildNodes(); for (int i = 0; i < children->getLength(); i++) {

DOMElement* elNode = dynamic_cast<DOMElement*>(children->item(i)); if (elNode != NULL) {

result.push_back(new ParsedXMLElement(elNode));

}

}

return result;

}

ParsedXMLElement::ParsedXMLElement(DOMElement* inElement)

{

mParser = NULL; // No parser for a subelement mElement = inElement;

}

Using an Adapter

Since adapters exist to provide a more appropriate interface for underlying functionality, their use should be straightforward and specific to the particular case. Given the previous example, the following program outputs selected information about an XML file:

int main(int argc, char** argv)

{

ParsedXMLElement e(“test.xml”);

cout << “root name: “ << e.getName() << endl;

vector<ParsedXMLElement*> subelements = e.getSubElements();

for (vector<ParsedXMLElement*>::iterator it = subelements.begin(); it != subelements.end(); ++it) {

cout << “subelement name: “ << (*it)->getName() << endl;

cout << “subelement speaker: “ << (*it)->getAttributeValue(“speaker”) << endl;

cout << “subelement text data: “ << (*it)->getTextData() << endl;

}

for (vector<ParsedXMLElement*>::iterator it = subelements.begin(); it != subelements.end(); ++it) {

delete *it;

}

return 0;

}

772