XERCES_CPP_NAMESPACE_USE #if !defined(XSEC_NO_XPATH) #include <iostream> #define KLUDGE_PREFIX "berindsig" // Helper function void setXPathNS(DOMDocument *d, DOMNamedNodeMap *xAtts, XSECXPathNodeList &addedNodes, XSECSafeBufferFormatter *formatter, XSECNameSpaceExpander * nse) { // if set then set the name spaces in the attribute list else clear them DOMElement * e = d->getDocumentElement(); if (e == NULL) { throw XSECException(XSECException::XPathError, "Element node not found in Document"); } if (xAtts != 0) { int xAttsCount = xAtts->getLength(); // Check all is OK with the Xalan Document and first element if (d == NULL) { throw XSECException(XSECException::XPathError, "Attempt to define XPath Name Space before setInput called"); } // Run through each attribute looking for name spaces const XMLCh *xpName; safeBuffer xpNameSB; const XMLCh *xpLocalName; const XMLCh *xpValue; for (int xCounter = 0; xCounter < xAttsCount; ++xCounter) { if (nse == NULL || !nse->nodeWasAdded(xAtts->item(xCounter))) { xpName = xAtts->item(xCounter)->getNodeName(); xpNameSB << (*formatter << xpName); if (xpNameSB.sbStrncmp("xmlns", 5) == 0) { // Check whether a node of this name already exists xpLocalName = xAtts->item(xCounter)->getLocalName(); xpValue = xAtts->item(xCounter)->getNodeValue(); if (e->hasAttributeNS(DSIGConstants::s_unicodeStrURIXMLNS, xpLocalName) == false) { // Nope e->setAttributeNS(DSIGConstants::s_unicodeStrURIXMLNS, xpName, xpValue); addedNodes.addNode(e->getAttributeNodeNS(DSIGConstants::s_unicodeStrURIXMLNS, xpLocalName)); } } } } } // Insert the kludge namespace safeBuffer k("xmlns:"); k.sbStrcatIn(KLUDGE_PREFIX); e->setAttributeNS(DSIGConstants::s_unicodeStrURIXMLNS, MAKE_UNICODE_STRING(k.rawCharBuffer()), DSIGConstants::s_unicodeStrURIDSIG); }