コード例 #1
0
ファイル: xml_utils.cpp プロジェクト: 8l/insieme
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();
}
コード例 #2
0
ファイル: DeltaSortOperations.cpp プロジェクト: alon/xydiff
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);

	}
コード例 #3
0
ファイル: xml_utils.cpp プロジェクト: 8l/insieme
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);
    }
}
コード例 #4
0
ファイル: DOMElementImpl.cpp プロジェクト: AmesianX/Sigil
// 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;
}
コード例 #5
0
ファイル: ConfigItem.cpp プロジェクト: lozpeng/applesales
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);
}
コード例 #6
0
ファイル: DOMElementImpl.cpp プロジェクト: AmesianX/Sigil
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;
}
コード例 #7
0
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;
}
コード例 #8
0
ファイル: DeltaApply.cpp プロジェクト: alon/xydiff
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);
		}
	
}