string XmlElement::getText() const { // return the empty string if there is no text DOMNode* first = base->getFirstChild(); while(first) { if (first->getNodeType() == 3) { char* ctext (XMLString::transcode(first->getNodeValue())); string text(ctext); XMLString::release(&ctext); return text; } first = first->getPreviousSibling(); } return string(); }
void SortDeleteOperationsEngine::unrollList(XID_DOMDocument *sourceDoc, DOMNode *node) { if (node->hasChildNodes()) { DOMNode* child = node->getLastChild(); while(child!=NULL) { unrollList(sourceDoc, child); child=child->getPreviousSibling(); } } XID_t myXid = sourceDoc->getXidMap().getXIDbyNode(node); std::map<XID_t, DOMNode*>::iterator p = operationBySourceNode.find((long)myXid); if (p!=operationBySourceNode.end()) theList.push_back(p->second); }
void XmlElement::setText(const string& text) { assert(doc != NULL && "Attempt to create text on a root node"); DOMNode* first = base->getFirstChild(); bool found = false; while(first && !found) { if (first->getNodeType() == 3) { first->setTextContent(toUnicode(text)); found = true; } first = first->getPreviousSibling(); } if (!found) { DOMText* textNode = doc->createTextNode(toUnicode(text)); base->appendChild(textNode); } }
// Returns the previous logical sibling with respect to the given node. DOMNode* DOMElementImpl::getPreviousLogicalSibling(const DOMNode* n) const { DOMNode* prev = n->getPreviousSibling(); // If "n" has no previous sibling and its parent is an entity reference node we // need to continue the search through the previous siblings of the entity // reference as these are logically siblings of the given node. if (prev == NULL) { DOMNode* parent = n->getParentNode(); while (parent != NULL && parent->getNodeType() == DOMNode::ENTITY_REFERENCE_NODE) { prev = parent->getPreviousSibling(); if (prev != NULL) { break; } parent = parent->getParentNode(); } } return prev; }
SYSTEM::IConfigItemPtr SYSTEM::CConfigItem::GetLastChild() { DOMNode *LastChild = ((DOMElement*)itemElement)->getLastChild(); if(LastChild == NULL) return NULL; while(LastChild != NULL && LastChild->getNodeType() == DOMNode::TEXT_NODE) LastChild = LastChild->getPreviousSibling(); if(LastChild == NULL) return NULL; CConfigItem* item = new CConfigItem; item->itemElement = LastChild; item->doc = doc; return IConfigItemPtr((IConfigItem*)item); }
DOMElement * DOMElementImpl::getLastElementChild() const { DOMNode* n = getLastChild(); while (n != NULL) { switch (n->getNodeType()) { case DOMNode::ELEMENT_NODE: return (DOMElement*) n; case DOMNode::ENTITY_REFERENCE_NODE: { DOMElement* e = getLastElementChild(n); if (e != NULL) return e; } break; default: break; } n = n->getPreviousSibling(); } return NULL; }
DOMComment *XmlParser::getCommentNode(DOMElement *element) { DOMNode *node = element; do { node = node->getPreviousSibling(); if (node == NULL) { // cerr << "getCommentNode() - no prior comment sibling\n"; return NULL; } } while (node->getNodeType() == DOMNode::TEXT_NODE); DOMComment *el = NULL; if (node->getNodeType() == DOMNode::COMMENT_NODE) { el = dynamic_cast< xercesc::DOMComment* >( node ); if (el == NULL) { cerr << "getCommentNode() - cast failed\n"; } } else { // cerr << "getCommentNode() - no comment found - type :" << node->getNodeType() << endl; } return el; }
void DeltaApplyEngine::ApplyDelta(XID_DOMDocument *IncDeltaDoc, int backwardNumber) { DOMNode* deltaRoot = IncDeltaDoc->getDocumentElement(); // <delta_unit> DOMNode* deltaElement ; for ( deltaElement = deltaRoot->getLastChild(); backwardNumber > 0; deltaElement = deltaElement->getPreviousSibling(), backwardNumber-- ) { DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(gLS); DOMDocument* backwardDeltaDoc = impl->createDocument(0, XMLString::transcode(""),0); //DOMDocument* backwardDeltaDoc = DOMDocument::createDocument(); DOMNode* backwardDeltaElement = XyDelta::ReverseDelta(backwardDeltaDoc, deltaElement); ApplyDeltaElement(backwardDeltaElement); } }