%description: Check cXMLElement::getElementByPath() basic functionality: relative paths %file: test.xml one two three four five six seven eight nine ten ten %global: #ifdef _MSC_VER #pragma warning(disable:4786) #endif static void getElement(const char *pathexpr) { cXMLElement *rootelement = getEnvir()->getXMLDocument("test.xml", nullptr); cXMLElement *node = rootelement->getElementByPath(pathexpr); EV << (!pathexpr ? "''" : pathexpr) << ": " << (!node ? "null" : node->getAttribute("id")) << "\n"; } %activity: getElement("."); getElement("././."); getElement("./foo"); getElement("./././foo/././."); getElement("foo"); getElement(" bar"); getElement(" bar "); // with spaces getElement("nothing"); getElement("bar[0]"); getElement("bar[ 2]"); getElement("bar[ 3 ]"); // with spaces getElement("bar[@color='green']"); getElement("bar[ @id = '11' ] "); // with spaces getElement("bar[1]/bar[2]"); getElement("*/bar[0]"); getElement("foo/*"); getElement("*/bar"); getElement("*[@color='green']/bar"); getElement("*[3]/*[1]"); getElement(".//bar[@color='yellow']"); getElement(".//bar[@color='green']/foo"); getElement(".//nothing"); getElement("*"); getElement("*/foo"); getElement("*/bar"); getElement("*/bar/././././."); getElement("./*"); getElement("./*/foo"); %contains: stdout .: 1 ././.: 1 ./foo: 2 ./././foo/././.: 2 foo: 2 bar: 3 bar : 3 nothing: null bar[0]: 3 bar[ 2]: 16 bar[ 3 ]: null bar[@color='green']: 11 bar[ @id = '11' ] : 11 bar[1]/bar[2]: 15 */bar[0]: 5 foo/*: 7 */bar: 5 *[@color='green']/bar: 13 *[3]/*[1]: 13 .//bar[@color='yellow']: 9 .//bar[@color='green']/foo: 12 .//nothing: null *: 2 */foo: 4 */bar: 5 */bar/././././.: 5 ./*: 2 ./*/foo: 4