本文整理汇总了C++中DOMNode::release方法的典型用法代码示例。如果您正苦于以下问题:C++ DOMNode::release方法的具体用法?C++ DOMNode::release怎么用?C++ DOMNode::release使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DOMNode
的用法示例。
在下文中一共展示了DOMNode::release方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: removeAttribute
void DOMElementImpl::removeAttribute(const XMLCh *nam)
{
if (fNode.isReadOnly())
throw DOMException(
DOMException::NO_MODIFICATION_ALLOWED_ERR, 0, GetDOMNodeMemoryManager);
int i = fAttributes->findNamePoint(nam);
if (i >= 0)
{
DOMNode *att = fAttributes->removeNamedItemAt(i);
((DOMAttrImpl *)att)->removeAttrFromIDNodeMap();
att->release();
}
}
示例2: append
/* ==================== VIRTUAL methods. =========== */
void FragmentObject::append(DataItem*& s) {
if (s != nullptr) {
DOMNode* n = nullptr;
XMLObject* x = dynamic_cast<XMLObject*>(s);
if (x != nullptr) {
DOMNode* nbase;
x->take(nbase);
DOMNode::NodeType nt = nbase->getNodeType();
switch (nt) {
case DOMNode::DOCUMENT_NODE: {
const DOMDocument* d = static_cast<const DOMDocument*>(nbase);
if (d != nullptr) {
const DOMNode* de = d->getDocumentElement();
if (de != nullptr) {
n = frag_doc->importNode(de,true); //importNode always takes a copy - returns DOMNode* inod = new node pointer.
}
delete d;
}
} break;
default: {
n = frag_doc->importNode(nbase,true); //importNode always takes a copy - returns DOMNode* inod = new node pointer.
nbase->release();
} break;
}
} else {
FragmentObject* y = dynamic_cast<FragmentObject*>(s);
if (y != nullptr) {
y->take(n);
} else {
std::string str = *s;
if ( ! str.empty() ) {
u_str tt;
XML::Manager::transcode(str,tt);
n = frag_doc->createTextNode(pcx(tt.c_str()));
}
}
}
fragment->appendChild(n);
delete s;
}
}
示例3: removeBaseAttr
static void removeBaseAttr(DOMDocument * domDocument) {
XMLNodeFilter * nodeFilter = new XMLNodeFilter();
DOMTreeWalker * domTreeWalker = domDocument->createTreeWalker(domDocument, DOMNodeFilter::SHOW_ALL, nodeFilter, true);
DOMNode * node = domTreeWalker->getCurrentNode();
while (node) {
DOMNamedNodeMap * nodeMap = node->getAttributes();
if (nodeMap != 0) {
DOMNode * attr = nodeMap->getNamedItem(XMLString::transcode("xml:base"));
if (attr) {
DOMNode * node = nodeMap->removeNamedItem(XMLString::transcode("xml:base"));
TFINFO("[Server Config] filtered attribute: " << XMLString::transcode(node->getNodeName()) << "=" << XMLString::transcode(node->getNodeValue()));
node->release();
}
}
node = domTreeWalker->nextNode();
}
delete nodeFilter;
}
示例4: main
int main()
{
try {
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch) {
char *pMessage = XMLString::transcode(toCatch.getMessage());
fprintf(stderr, "Error during XMLPlatformUtils::Initialize(). \n"
" Message is: %s\n", pMessage);
XMLString::release(&pMessage);
return -1;
}
/*
Range tests include testing of
createRange
setStart, setStartBefore. setStartAfter,
setEnd, setEndBefore. setEndAfter
getStartContainer, getStartOffset
getEndContainer, getEndOffset
getCommonAncestorContainer
selectNode
selectNodeContents
insertNode
deleteContents
collapse
getCollapsed
surroundContents
compareBoundaryPoints
cloneRange
cloneContents
extractContents
toString
detach
removeChild
*/
{
XMLCh tempStr[100];
XMLString::transcode("Range",tempStr,99);
{
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(tempStr);
DOMDocument* doc = impl->createDocument();
//Creating a root element
DOMElement* root = doc->createElement(xBody);
doc->appendChild(root);
//Creating the siblings of root
DOMElement* E11 = doc->createElement(xH1);
root->appendChild(E11);
DOMElement* E12 = doc->createElement(xP);
root->appendChild(E12);
//Attaching texts to siblings
DOMText* textNode1 = doc->createTextNode(xTitle);
E11->appendChild(textNode1);
DOMText* textNode11 = doc->createTextNode(xAnotherText);
E11->appendChild(textNode11);
DOMText* textNode2 = doc->createTextNode(xBlahxyz);
E12->appendChild(textNode2);
DOMText* E210 = doc->createTextNode(xInsertedText);
doc->release();
}
{
//DOM Tree and some usable node creation
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(tempStr);
DOMDocument* doc = impl->createDocument();
//Creating a root element
DOMElement* root = doc->createElement(xBody);
doc->appendChild(root);
//Creating the siblings of root
DOMElement* E11 = doc->createElement(xH1);
root->appendChild(E11);
DOMElement* E12 = doc->createElement(xP);
root->appendChild(E12);
//Attaching texts to siblings
DOMText* textNode1 = doc->createTextNode(xTitle);
E11->appendChild(textNode1);
DOMText* textNode11 = doc->createTextNode(xAnotherText);
E11->appendChild(textNode11);
DOMText* textNode2 = doc->createTextNode(xBlahxyz);
E12->appendChild(textNode2);
//.........这里部分代码省略.........
示例5: main
int main( )
{
try {
// Initialize Xerces and retrieve a DOMImplementation.
XercesInitializer init;
DOMImplementation* impl =
DOMImplementationRegistry::getDOMImplementation(
fromNative("LS").c_str( )
);
if (impl == 0) {
cout << "couldn't create DOM implementation\n";
return EXIT_FAILURE;
}
// Construct a DOMBuilder to parse animals.xml.
DOMPtr<DOMBuilder> parser =
static_cast<DOMImplementationLS*>(impl)->
createDOMBuilder(
DOMImplementationLS::MODE_SYNCHRONOUS, 0
);
CircusErrorHandler err;
parser->setErrorHandler(&err);
// Parse animals.xml.
DOMDocument* doc =
parser->parseURI("animals.xml");
DOMElement* animalList = doc->getDocumentElement( );
// Create XPath expression.
auto_ptr<XPathEvaluator>
evaluator(XPathEvaluator::createEvaluator( ));
auto_ptr<XPathNSResolver>
resolver(evaluator->createNSResolver(animalList));
auto_ptr<XPathExpression>
xpath(
evaluator->createExpression(
fromNative(
"animalList/animal[child::name='Herby']"
).c_str( ),
resolver.get( )
)
);
auto_ptr<XPathEvaluator> evaluator(XPathEvaluator::createEvaluator( ));
auto_ptr<XPathNSResolver> resolver(evaluator->createNSResolver(animalList));
auto_ptr<XPathExpression> xpath(
evaluator->createExpression(
fromNative("animalList/animal[child::name='Herby']").c_str( ),
resolver.get( )
));
// Evaluate the expression.
XPathResult* result =
xpath->evaluate(
doc,
XPathResult::ORDERED_NODE_ITERATOR_TYPE,
0
);
DOMNode* herby;
if (herby = result->iterateNext( )) {
animalList->removeChild(herby);
herby->release( ); // optional.
}
// Construct a DOMWriter to save animals.xml.
DOMPtr<DOMWriter> writer =
static_cast<DOMImplementationLS*>(impl)->createDOMWriter( );
writer->setErrorHandler(&err);
// Save animals.xml.
LocalFileFormatTarget file("circus.xml");
writer->writeNode(&file, *animalList);
} catch (const DOMException& e) {
cout << toNative(e.getMessage( )) << "\n";
return EXIT_FAILURE;
} catch (const XPathException &e) {
cout << e.getString( ) << "\n";
return EXIT_FAILURE;
} catch (const exception& e) {
cout << e.what( ) << "\n";
return EXIT_FAILURE;
}
}
示例6: startElement
// ---------------------------------------------------------------------------
// XSDDOMParser: Implementation of the XMLDocumentHandler interface
// ---------------------------------------------------------------------------
void XSDDOMParser::startElement( const XMLElementDecl& elemDecl
, const unsigned int urlId
, const XMLCh* const elemPrefix
, const RefVectorOf<XMLAttr>& attrList
, const unsigned int attrCount
, const bool isEmpty
, const bool isRoot)
{
fDepth++;
// while it is true that non-whitespace character data
// may only occur in appInfo or documentation
// elements, it's certainly legal for comments and PI's to
// occur as children of annotation; we need
// to account for these here.
if (fAnnotationDepth == -1)
{
if (XMLString::equals(elemDecl.getBaseName(), SchemaSymbols::fgELT_ANNOTATION) &&
XMLString::equals(getURIText(urlId), SchemaSymbols::fgURI_SCHEMAFORSCHEMA))
{
fAnnotationDepth = fDepth;
startAnnotation(elemDecl, attrList, attrCount);
}
}
else if (fDepth == fAnnotationDepth+1)
{
fInnerAnnotationDepth = fDepth;
startAnnotationElement(elemDecl, attrList, attrCount);
}
else
{
startAnnotationElement(elemDecl, attrList, attrCount);
// avoid falling through; don't call startElement in this case
return;
}
DOMElement *elem;
if (urlId != fScanner->getEmptyNamespaceId()) //TagName has a prefix
{
if (elemPrefix && *elemPrefix)
{
XMLBufBid elemQName(&fBufMgr);
elemQName.set(elemPrefix);
elemQName.append(chColon);
elemQName.append(elemDecl.getBaseName());
elem = createElementNSNode(
fScanner->getURIText(urlId), elemQName.getRawBuffer());
}
else {
elem = createElementNSNode(
fScanner->getURIText(urlId), elemDecl.getBaseName());
}
}
else {
elem = createElementNSNode(0, elemDecl.getBaseName());
}
DOMElementImpl *elemImpl = (DOMElementImpl *) elem;
for (unsigned int index = 0; index < attrCount; ++index)
{
const XMLAttr* oneAttrib = attrList.elementAt(index);
unsigned int attrURIId = oneAttrib->getURIId();
const XMLCh* namespaceURI = 0;
//for xmlns=...
if (XMLString::equals(oneAttrib->getName(), XMLUni::fgXMLNSString))
attrURIId = fScanner->getXMLNSNamespaceId();
//TagName has a prefix
if (attrURIId != fScanner->getEmptyNamespaceId())
namespaceURI = fScanner->getURIText(attrURIId); //get namespaceURI
// revisit. Optimize to init the named node map to the
// right size up front.
DOMAttrImpl *attr = (DOMAttrImpl *)
fDocument->createAttributeNS(namespaceURI, oneAttrib->getQName());
attr->setValue(oneAttrib -> getValue());
DOMNode* remAttr = elemImpl->setAttributeNodeNS(attr);
if (remAttr)
remAttr->release();
// Attributes of type ID. If this is one, add it to the hashtable of IDs
// that is constructed for use by GetElementByID().
if (oneAttrib->getType()==XMLAttDef::ID)
{
if (fDocument->fNodeIDMap == 0)
fDocument->fNodeIDMap = new (fDocument) DOMNodeIDMap(500, fDocument);
fDocument->fNodeIDMap->add(attr);
attr->fNode.isIdAttr(true);
}
attr->setSpecified(oneAttrib->getSpecified());
}
// set up the default attributes
if (elemDecl.hasAttDefs())
//.........这里部分代码省略.........
示例7: main
int main()
{
try {
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch) {
char *pMessage = XMLString::transcode(toCatch.getMessage());
fprintf(stderr, "Error during XMLPlatformUtils::Initialize(). \n"
" Message is: %s\n", pMessage);
XMLString::release(&pMessage);
return -1;
}
// Create a XMLCh buffer for string manipulation
XMLCh tempStr[4000];
XMLCh featureStr[100];
XMLString::transcode("Traversal",featureStr,99);
//
// Doc - Create a small document tree
//
{
//creating a DOM Tree
/* Tests are based on the tree structure below
doc - root - E11 (attr01) - textNode1
- E111
- E112
- cdataSec
- E12 (attr02) - textNode2
- E121
- E122
- E13 - E131
- docPI
- comment
*/
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(featureStr);
DOMDocument* doc = impl->createDocument();
//Creating a root element
XMLString::transcode("RootElement", tempStr, 3999);
DOMElement* root = doc->createElement(tempStr);
doc->appendChild(root);
//Creating the siblings of root
XMLString::transcode("FirstSibling", tempStr, 3999);
DOMElement* E11 = doc->createElement(tempStr);
root->appendChild(E11);
XMLString::transcode("SecondSibling", tempStr, 3999);
DOMElement* E12 = doc->createElement(tempStr);
root->appendChild(E12);
XMLString::transcode("ThirdSibling", tempStr, 3999);
DOMElement* E13 = doc->createElement(tempStr);
root->appendChild(E13);
//Attaching texts to few siblings
XMLString::transcode("Text1", tempStr, 3999);
DOMText* textNode1 = doc->createTextNode(tempStr);
E11->appendChild(textNode1);
XMLString::transcode("Text2", tempStr, 3999);
DOMText* textNode2 = doc->createTextNode(tempStr);
E12->appendChild(textNode2);
//creating child of siblings
XMLString::transcode("FirstSiblingChild1", tempStr, 3999);
DOMElement* E111 = doc->createElement(tempStr);
E11->appendChild(E111);
XMLString::transcode("Attr01", tempStr, 3999);
DOMAttr* attr01 = doc->createAttribute(tempStr);
DOMNode* rem = E11->setAttributeNode(attr01);
if (rem)
rem->release();
XMLString::transcode("FirstSiblingChild2", tempStr, 3999);
DOMElement* E112 = doc->createElement(tempStr);
E11->appendChild(E112);
XMLString::transcode("SecondSiblingChild1", tempStr, 3999);
DOMElement* E121 = doc->createElement(tempStr);
E12->appendChild(E121);
XMLString::transcode("Attr01", tempStr, 3999);
DOMAttr* attr02 = doc->createAttribute(tempStr);
rem = E12->setAttributeNode(attr02);
if (rem)
rem->release();
XMLString::transcode("SecondSiblingChild2", tempStr, 3999);
DOMElement* E122 = doc->createElement(tempStr);
E12->appendChild(E122);
XMLString::transcode("ThirdSiblingChild1", tempStr, 3999);
DOMElement* E131 = doc->createElement(tempStr);
//.........这里部分代码省略.........
示例8: ProcessMessage
//
// XML to XML
//
AbstractFilter::FilterResult BatchFilter::ProcessMessage( XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* inputOutputData, NameValueCollection& transportHeaders, bool asClient )
{
//Validate properties to see if contains Batch file
validateProperties( transportHeaders );
//Get the BatchFILE
string fileBatchLocation = m_Properties[ BatchFilter::BatchFILE ];
XALAN_USING_XALAN( XalanDOMException )
try
{
XALAN_USING_XALAN( XercesParserLiaison )
XALAN_USING_XALAN( XercesDOMSupport )
XALAN_USING_XALAN( XercesDOMWrapperParsedSource )
XALAN_USING_XALAN( XalanDOMString );
XALAN_USING_XALAN( XalanCompiledStylesheet );
XALAN_USING_XALAN( FormatterToXercesDOM )
XALAN_USING_XALAN( XalanAutoPtr )
XALAN_USING_XERCES( DOMImplementation )
XALAN_USING_XERCES( DOMDocument )
XALAN_USING_XALAN( FormatterListener )
XALAN_USING_XALAN( StylesheetRoot )
// reuse error reporter
m_ErrorReporter->resetErrors();
DEBUG( "About to apply Batch [" << fileBatchLocation << "]" );
XalanCompiledStylesheet* stylesheet = getBatch( fileBatchLocation );
//Prepare a DOM Document to be used as input for a transformation
XercesDOMSupport theSupporter;
XercesParserLiaison theLiaison;
theLiaison.setDoNamespaces( true );
//Let the wrapper know that it doesn't have an uri
XalanDOMString uri( "" );
//a XercesDOMWrapperParsedSource will be used
XercesDOMWrapperParsedSource wrapper( inputOutputData, theLiaison, theSupporter, uri );
//Prepare to get the transformation's result in a DOMDocument format
const XalanAutoPtr<DOMDocument> theDocument( DOMImplementation::getImplementation()->createDocument() );
// FormatterToXercesDOM will be used, which we'll hook up to Xalan's output stage...
FormatterToXercesDOM theFormatter( theDocument.get(), 0 );
//Transform the input DOMDocument using the compiled stylesheet. The result will be a DOMDocument
int theResult = getTransformer()->transform( wrapper, stylesheet, theFormatter );
if( theResult != 0 )
{
stringstream messageBuffer;
messageBuffer << "Xalan transformation error: " << getTransformer()->getLastError();
throw runtime_error( messageBuffer.str() );
}
DEBUG( "Batch applied successfully. " );
// Copy a DOMDocument content ( source ) into another DOMDocument ( target )
//Copy the transformation result DOMDocument into the inputOutputData DOMDocument parameter
//Get the target document
DOMDocument* doc = theFormatter.getDocument();
if ( doc == NULL )
{
TRACE( "Transformation error: The resulted document is NULL" );
throw runtime_error( "Transformation error: The resulted document is NULL" );
}
//Get the root element for the target document
DOMElement* theRootElement = doc->getDocumentElement();
if ( theRootElement == NULL )
{
TRACE( "Transformation error: Root element of the resulted document is NULL " );
throw runtime_error( "Transformation error: Root element of the resulted document is NULL " );
}
//Clean the target document
// - Delete the root element (and ? subtree) from the target document
DOMElement* theOldRootElement = inputOutputData->getDocumentElement();
DOMNode* theRemovedChild = inputOutputData->removeChild( theOldRootElement );
theRemovedChild->release();
//Copy the source DOMDocument content to taget DOMDocument
// - Import the root sub-tree from the source DOMDocument to inputOutputData DOMDocument
// - Append the imported node and his sub-tree to inputOutputData DOMDocument
inputOutputData->appendChild( inputOutputData->importNode( theRootElement , true ) );
replyOutputFormat( transportHeaders, stylesheet->getStylesheetRoot()->getOutputMethod() );
DEBUG( "Transformation done. Output format is [" << transportHeaders[ BatchOUTPUTFORMAT ]
<< "]. Output address is [" << inputOutputData << "]" );
}
catch( const XalanDOMException& e )
{
stringstream errorMessage;
errorMessage << "Xalan transformation error: Code is " << e.getExceptionCode();
//.........这里部分代码省略.........
示例9: replaceWholeText
DOMText* DOMTextImpl::replaceWholeText(const XMLCh* newText)
{
DOMDocument *doc = getOwnerDocument();
DOMTreeWalker* pWalker=doc->createTreeWalker(doc->getDocumentElement(), DOMNodeFilter::SHOW_ALL, NULL, true);
pWalker->setCurrentNode((DOMNode*)this);
// Logically-adjacent text nodes are Text or CDATASection nodes that can be visited sequentially in document order or in
// reversed document order without entering, exiting, or passing over Element, Comment, or ProcessingInstruction nodes.
DOMNode* pFirstTextNode=this;
DOMNode* prevNode;
while((prevNode=pWalker->previousNode())!=NULL)
{
if(prevNode->getNodeType()==ELEMENT_NODE || prevNode->getNodeType()==COMMENT_NODE || prevNode->getNodeType()==PROCESSING_INSTRUCTION_NODE)
break;
pFirstTextNode=prevNode;
}
// before doing any change we need to check if we are going to remove an entity reference that doesn't contain just text
DOMNode* pCurrentNode=pWalker->getCurrentNode();
DOMNode* nextNode;
while((nextNode=pWalker->nextNode())!=NULL)
{
if(nextNode->getNodeType()==ELEMENT_NODE || nextNode->getNodeType()==COMMENT_NODE || nextNode->getNodeType()==PROCESSING_INSTRUCTION_NODE)
break;
if(nextNode->getNodeType()==ENTITY_REFERENCE_NODE)
{
DOMTreeWalker* pInnerWalker=doc->createTreeWalker(nextNode, DOMNodeFilter::SHOW_ALL, NULL, true);
while(pInnerWalker->nextNode())
{
short nodeType=pInnerWalker->getCurrentNode()->getNodeType();
if(nodeType!=ENTITY_REFERENCE_NODE && nodeType!=TEXT_NODE && nodeType!=CDATA_SECTION_NODE)
throw DOMException(DOMException::NO_MODIFICATION_ALLOWED_ERR, 0, GetDOMNodeMemoryManager);
}
pInnerWalker->release();
}
}
DOMText* retVal=NULL;
// if the first node in the chain is a text node, replace its content, otherwise create a new node
if(newText && *newText)
{
if(!castToNodeImpl(pFirstTextNode)->isReadOnly() && (pFirstTextNode->getNodeType()==TEXT_NODE || pFirstTextNode->getNodeType()==CDATA_SECTION_NODE))
{
pFirstTextNode->setNodeValue(newText);
retVal=(DOMText*)pFirstTextNode;
}
else
{
if(getNodeType()==TEXT_NODE)
retVal=doc->createTextNode(newText);
else
retVal=doc->createCDATASection(newText);
pFirstTextNode->getParentNode()->insertBefore(retVal, pFirstTextNode);
}
}
// now delete all the following text nodes
pWalker->setCurrentNode(pCurrentNode);
while((nextNode=pWalker->nextNode())!=NULL)
{
if(nextNode->getNodeType()==ELEMENT_NODE || nextNode->getNodeType()==COMMENT_NODE || nextNode->getNodeType()==PROCESSING_INSTRUCTION_NODE)
break;
if(nextNode!=retVal)
{
// keep the tree walker valid
pWalker->previousNode();
nextNode->getParentNode()->removeChild(nextNode);
nextNode->release();
}
}
pWalker->release();
return retVal;
}
示例10: setStatusReason
void XKMSStatusImpl::setStatusReason(StatusValue status, StatusReason reason, bool value) {
if (status == StatusUndefined || reason == ReasonUndefined) {
throw XSECException(XSECException::StatusError,
"XKMSStatus::setStatusReason - status or reason undefined");
}
if ((m_statusReasons[status-1][reason-1] != NULL) == value)
return;
/* Delete if necessary */
if (value == false) {
DOMNode * c = m_statusReasons[status-1][reason-1];
mp_statusElement->removeChild(c);
c->release();
m_statusReasons[status-1][reason-1] = NULL;
return;
}
/* Find a previously found element to insert before*/
DOMNode * found = NULL;
m_statusValue = XKMSStatus::StatusUndefined;
StatusValue i;
StatusReason j = XKMSStatus::Signature;
/* Clean out status codes */
for (i = Indeterminate ; i > StatusUndefined && !(i == status && j == reason); i = (StatusValue)(i-1)) {
for (j = XKMSStatus::Signature; j != XKMSStatus::ReasonUndefined && !(i == status && j == reason); j = (XKMSStatus::StatusReason) (j-1)) {
if (m_statusReasons[i-1][j-1] != NULL)
found = m_statusReasons[i-1][j-1];
}
}
/* Now lets create our new element and its text child */
safeBuffer str;
DOMDocument *doc = mp_env->getParentDocument();
// str.sbXMLChIn(XKMSConstants::s_unicodeStrURIXKMS);
const XMLCh * prefix = mp_env->getXKMSNSPrefix();
if (status == Valid) {
makeQName(str, prefix, XKMSConstants::s_tagValidReason);
}
else if (status == Invalid) {
makeQName(str, prefix, XKMSConstants::s_tagInvalidReason);
}
else {
makeQName(str, prefix, XKMSConstants::s_tagIndeterminateReason);
}
DOMElement * e = doc->createElementNS(XKMSConstants::s_unicodeStrURIXKMS,
str.rawXMLChBuffer());
/* Create the text node child */
str.sbXMLChIn(XKMSConstants::s_unicodeStrURIXKMS);
str.sbXMLChCat(XKMSConstants::s_tagStatusReasonCodes[reason]);
e->appendChild(doc->createTextNode(str.rawXMLChBuffer()));
/* Insert at correct place */
if (found == NULL) {
mp_statusElement->appendChild(e);
mp_env->doPrettyPrint(mp_statusElement);
}
else {
mp_statusElement->insertBefore(e, found);
if (mp_env->getPrettyPrintFlag() == true)
mp_statusElement->insertBefore(doc->createTextNode(DSIGConstants::s_unicodeStrNL), found);
}
m_statusReasons[status-1][reason-1] = e;
}
示例11: ApplyOperation
void DeltaApplyEngine::ApplyOperation(DOMNode *operationNode) {
vddprintf(("ApplyOperation\n"));
XMLCh dStr[2];
XMLCh iStr[2];
XMLCh uStr[2];
XMLCh adStr[3];
XMLCh aiStr[3];
XMLCh auStr[3];
XMLCh renameRootStr[11];
XMLString::transcode("d", dStr, 1);
XMLString::transcode("i", iStr, 1);
XMLString::transcode("u", uStr, 1);
XMLString::transcode("ad", adStr, 2);
XMLString::transcode("ai", aiStr, 2);
XMLString::transcode("au", auStr, 2);
XMLString::transcode("renameRoot", renameRootStr, 10);
XMLCh tempStr[6];
if (XMLString::equals(operationNode->getLocalName(), dStr)) {
vddprintf((" d(elete)\n"));
bool move = false ;
XMLString::transcode("move", tempStr, 5);
DOMNode* moveAttr = operationNode->getAttributes()->getNamedItem(tempStr) ;
XMLString::transcode("yes", tempStr, 5);
if ((moveAttr!=NULL) && (XMLString::equals(moveAttr->getNodeValue(),tempStr))) {
move = true;
}
XMLString::transcode("xm", tempStr, 5);
char *xidmapStr = XMLString::transcode(operationNode->getAttributes()->getNamedItem(tempStr)->getNodeValue());
if (move) {
XidMap_Parser parse(xidmapStr) ;
XID_t myXid = parse.getRootXID();
Subtree_MoveFrom( myXid );
}
else {
Subtree_Delete(xidmapStr) ;
}
XMLString::release(&xidmapStr);
}
else if (XMLString::equals(operationNode->getLocalName(),iStr)) {
vddprintf((" i(nsert)\n"));
bool move = false ;
XMLString::transcode("move", tempStr, 5);
DOMNode* moveAttr = operationNode->getAttributes()->getNamedItem(tempStr) ;
XMLString::transcode("yes", tempStr, 5);
if ( (moveAttr!=NULL) && (XMLString::equals( moveAttr->getNodeValue(), tempStr ))) {
move = true;
}
XMLString::transcode("pos", tempStr, 5);
DOMNode *n = operationNode->getAttributes()->getNamedItem(tempStr);
int position = XyInt(n->getNodeValue());
XMLString::transcode("par", tempStr, 5);
n = operationNode->getAttributes()->getNamedItem(tempStr);
XID_t parentXID = (XID_t)(int)XyInt(n->getNodeValue());
XMLString::transcode("xm", tempStr, 5);
char *xidmapStr = XMLString::transcode(operationNode->getAttributes()->getNamedItem(tempStr)->getNodeValue());
if (move) {
XidMap_Parser parse(xidmapStr) ;
XID_t myXid = parse.getRootXID();
Subtree_MoveTo( myXid, parentXID, position );
}
else {
DOMNode* insertRoot ;
// get data to insert
if (operationNode->hasChildNodes()) insertRoot = operationNode->getFirstChild() ;
else THROW_AWAY(("insert operator element contains no data"));
Subtree_Insert( insertRoot, parentXID, position, xidmapStr ) ;
}
XMLString::release(&xidmapStr);
}
else if (XMLString::equals(operationNode->getLocalName(), uStr)) {
vddprintf((" u(pdate)\n"));
XMLString::transcode("oldxm", tempStr, 5);
char *xidmapStr = XMLString::transcode(operationNode->getAttributes()->getNamedItem(tempStr)->getNodeValue());
XidMap_Parser parse(xidmapStr) ;
XID_t nodeXID = parse.getRootXID();
TextNode_Update( nodeXID, operationNode);
XMLString::release(&xidmapStr);
}
else if (XMLString::equals(operationNode->getLocalName(), adStr)) {
vddprintf((" a(ttribute) d(elete)\n"));
XMLString::transcode("xid", tempStr, 5);
XID_t nodeXID = (XID_t)(int)XyInt(operationNode->getAttributes()->getNamedItem(tempStr)->getNodeValue());
XMLString::transcode("a", tempStr, 5);
const XMLCh* attr = operationNode->getAttributes()->getNamedItem(tempStr)->getNodeValue() ;
Attribute_Delete( nodeXID, attr );
}
else if (XMLString::equals(operationNode->getLocalName(), aiStr)) {
vddprintf((" a(ttribute) i(nsert)\n"));
//.........这里部分代码省略.........