// read text content: assumes element with text only - no child elements. bool Reader::readStringElement(const char *strElement, std::wstring &strValue) { if ( readStartElement(strElement) ) { readPCData(strValue); return readEndElement(false, strElement); } return false; }
bool BaseStateAbstract::genCloseElement() { bool ok = false; if (flags & GuiConst::STATE_SAVE_REQUEST) { ok = writeCloseElement(); } else { ok = readEndElement(); } return ok; }
bool BaseStateAbstract::readEndElement(QString expected) { if (readEndElement()) { if (reader->name() == expected) return true; else logNotAdequate("readEndElement:String",expected ); } else { logStatus(); } return false; }
// conclude self-closing element OR consume closing element. bool Reader::readEndElement(bool bSkip) { bool bOK = false; if (_stack.size() > 0) { bool bChildren = _stack.back().Children; skipspace(!bChildren); if (bChildren) { //bool bSkip = false; std::string strTail; strTail.reserve(_stack.back().Element.size() + 3); strTail = "</"; strTail += _stack.back().Element; strTail += ">"; do { bOK = _parser.parseMatch(strTail.c_str()); if (!bOK && bSkip) { if ( readStartElement() ) { _stack.back().Skipped++; _iSkipped++; readEndElement(bSkip); // recursive } else break; } else break; } while (!bOK); } else bOK = _parser.parseMatch("/>"); if (bOK) _stack.pop_back(); } return bOK; }
// conclude named self-closing element OR consume named closing element. // return false if the top of the element stack does not match our expected element. bool Reader::readEndElement(bool bSkip, const char *element) { return _stack.size() && _stack.back().Element.compare(element) == 0 && readEndElement(bSkip); }