You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by "tommy klehr (JIRA)" <xe...@xml.apache.org> on 2010/12/02 14:34:11 UTC
[jira] Commented: (XERCESC-1953) extra newline after declaration in
1st use of DOMWriter
[ https://issues.apache.org/jira/browse/XERCESC-1953?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12966119#action_12966119 ]
tommy klehr commented on XERCESC-1953:
--------------------------------------
the static variables are not being reinitialized. looks like this has been fixed in the 3.x version by moving these two variables to the class DOMLSSerializerImpl
*** DOMWriterImpl.cpp.orig Tue Aug 28 14:42:12 2007
--- DOMWriterImpl.cpp Thu Dec 2 08:09:39 2010
***************
*** 1597,1606 ****
--- 1597,1608 ----
}
}
void DOMWriterImpl::processNode(const DOMNode* const nodeToWrite)
{
+ lineFeedInTextNodePrinted = false;
+ lastWhiteSpaceInTextNode = 0;
processNode(nodeToWrite, 0);
}
bool DOMWriterImpl::canSetFeature(const int featureId
, bool val) const
> extra newline after declaration in 1st use of DOMWriter
> -------------------------------------------------------
>
> Key: XERCESC-1953
> URL: https://issues.apache.org/jira/browse/XERCESC-1953
> Project: Xerces-C++
> Issue Type: Bug
> Components: DOM
> Affects Versions: 2.8.0
> Environment: Solaris 10
> Reporter: tommy klehr
> Priority: Minor
>
> the sample program produces different output from DOMWriter although it's using the same input.
> The first output has an extra newline after the declaration. The second output has the document element on the same line as the declaration.
> -------------------------------------------------
> [mynah63.dev.sol10] $ ./tc
> impl = 4df4c
> theSerializer = 58764
> can set it to discarddefaultcontent
> can set it to formatprettyprint
> rc from writeNote() = 1
> value =
> '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
> <note>
> <to>Tove</to>
> <from>Jani</from>
> <heading>Reminder</heading>
> <salutation>Dear</salutation>
> <body>Don't forget me this weekend!</body>
> </note>
> '
> next take...
> impl = 4df4c
> theSerializer = 5a144
> can set it to discarddefaultcontent
> can set it to formatprettyprint
> rc from writeNote() = 1
> value =
> '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><note>
> <to>Tove</to>
> <from>Jani</from>
> <heading>Reminder</heading>
> <salutation>Dear</salutation>
> <body>Don't forget me this weekend!</body>
> </note>
> '
> $
> -------------------------------------------------
> #include <assert.h>
> #include <unistd.h>
> #include <iostream.h>
> #include <sstream>
> #include <fstream>
> #include <string.h>
> #include <rw/cstring.h>
> #include <xalanc/Include/PlatformDefinitions.hpp>
> #include <xalanc/Include/XalanVector.hpp>
> #include <xalanc/Include/STLHelper.hpp>
> #include <xalanc/XalanDOM/XalanDocument.hpp>
> #include <xalanc/XalanDOM/XalanElement.hpp>
> #include <xalanc/PlatformSupport/DirectoryEnumerator.hpp>
> #include <xalanc/PlatformSupport/DOMStringHelper.hpp>
> #include <xalanc/PlatformSupport/ExecutionContext.hpp>
> #include <xalanc/DOMSupport/DOMServices.hpp>
> #include <xalanc/XPath/XObjectFactoryDefault.hpp>
> #include <xalanc/XPath/XPath.hpp>
> #include <xalanc/XPath/XPathConstructionContextDefault.hpp>
> #include <xalanc/XPath/XPathEnvSupportDefault.hpp>
> #include <xalanc/XPath/XPathExecutionContextDefault.hpp>
> #include <xalanc/XPath/XPathInit.hpp>
> #include <xalanc/XPath/XPathProcessorImpl.hpp>
> #include <xalanc/XPath/XPathFactoryDefault.hpp>
> #include <xalanc/XPath/XPathEvaluator.hpp>
> #include <xalanc/XalanSourceTree/XalanSourceTreeDOMSupport.hpp>
> #include <xalanc/XalanSourceTree/XalanSourceTreeInit.hpp>
> #include <xalanc/XalanSourceTree/XalanSourceTreeParserLiaison.hpp>
> #include <xalanc/XalanTransformer/XalanTransformer.hpp>
> #include <xalanc/XalanTransformer/XercesDOMWrapperParsedSource.hpp>
> #include <xalanc/XalanTransformer/XalanSourceTreeWrapperParsedSource.hpp>
> #include <xalanc/XSLT/ProblemListener.hpp>
> //These includes are for converting XML document into String
> #include <xalanc/PlatformSupport/XalanOutputStreamPrintWriter.hpp>
> #include <xalanc/PlatformSupport/XalanStdOutputStream.hpp>
> #include <xalanc/XMLSupport/FormatterToXML.hpp>
> #include <xalanc/XMLSupport/FormatterTreeWalker.hpp>
> #include <xalanc/XMLSupport/XMLSupportInit.hpp>
> #include <xalanc/XercesParserLiaison/XercesDOMSupport.hpp>
> #include <xalanc/XercesParserLiaison/XercesParserLiaison.hpp>
> #include <xalanc/XercesParserLiaison/XercesDocumentWrapper.hpp>
> #include <xalanc/XalanDOM/XalanNodeList.hpp>
> #include <xalanc/XalanDOM/XalanDOMException.hpp>
> #include <xalanc/XPath/XalanXPathException.hpp>
> #include <xalanc/XPath/XPathParserException.hpp>
> //#include <xalanc/XercesParserLiaison/Deprecated/XercesDocumentBridge.hpp>
> //For Xerces DOM usage
> #include <xercesc/util/XMLString.hpp>
> #include <xercesc/util/XMLException.hpp>
> #include <xercesc/util/PlatformUtils.hpp>
> #include <xercesc/dom/DOM.hpp>
> #include <xercesc/dom/DOMNode.hpp>
> #include <xercesc/dom/DOMNamedNodeMap.hpp>
> //#include <xercesc/dom/DOMWriterFilter.hpp>
> #include <xercesc/dom/DOMException.hpp>
> #include <xercesc/dom/DOMDocument.hpp>
> #include <xercesc/framework/LocalFileInputSource.hpp> // This is needed for const LocalFileInputSource theInputSource(theFileName.c_str());
> #include <xercesc/framework/MemBufInputSource.hpp> // This is needed for const MemBufInputSource theInputSource(theFileName.c_str());
> #include <xercesc/framework/MemBufFormatTarget.hpp>
> #include <xercesc/parsers/XercesDOMParser.hpp>
> //#include <xercesc/dom/deprecated/DOM_Node.hpp>
> #include <xercesc/dom/DOMNodeFilter.hpp>
> #include <xercesc/dom/DOMImplementation.hpp>
> #include <xercesc/dom/DOMImplementationLS.hpp>
> #include <xercesc/dom/DOMWriter.hpp>
> #include <xercesc/framework/StdOutFormatTarget.hpp>
> #include <xercesc/framework/LocalFileFormatTarget.hpp>
> #include <xercesc/util/XMLUniDefs.hpp>
> #include <xercesc/dom/DOM.hpp>
> XALAN_USING_STD(cerr)
> XALAN_USING_STD(endl)
> XALAN_USING_STD(ostream)
> XALAN_USING_STD(ifstream)
> XALAN_USING_XALAN(XalanDocument)
> XALAN_USING_XALAN(XPathEvaluator)
> XALAN_USING_XALAN(XalanDOMString)
> XALAN_USING_XALAN(XalanSourceTreeInit)
> XALAN_USING_XALAN(XercesDOMSupport)
> XALAN_USING_XALAN(XercesParserLiaison)
> XALAN_USING_XALAN(XalanVector)
> XALAN_USING_XALAN(ExecutionContext)
> XALAN_USING_XALAN(MemoryManagerType)
> //For Xerces DOM usage
> XALAN_USING_XERCES(XMLPlatformUtils)
> XALAN_USING_XERCES(DOMNode)
> XALAN_USING_XERCES(DOMNamedNodeMap)
> XALAN_USING_XERCES(XMLString)
> XALAN_USING_XERCES(DOMImplementation)
> XALAN_USING_XERCES(DOMImplementationRegistry)
> XALAN_USING_XERCES(DOMWriter)
> XALAN_USING_XERCES(DOMImplementationLS)
> XALAN_USING_XERCES(XMLUni)
> //XALAN_USING_XERCES(DOMWriterFilter)
> XALAN_USING_XERCES(DOMErrorHandler)
> XALAN_USING_XERCES(XMLFormatTarget)
> //XALAN_USING_XERCES(DOMWriterFilter)
> XALAN_USING_XERCES(LocalFileInputSource) //const LocalFileInputSource theInputSource(theFileName.c_str());
> XALAN_USING_XERCES(MemBufInputSource)
> XALAN_USING_XERCES(MemBufFormatTarget)
> XALAN_USING_XERCES(XMLException)
> XALAN_USING_XERCES(DOMException)
> XALAN_USING_XERCES(DOMNodeFilter)
> XALAN_USING_XERCES(LocalFileFormatTarget)
> //For XPath
> XALAN_USING_XALAN(XPathEvaluator)
> XALAN_USING_XALAN(XObjectPtr)
> XALAN_USING_XALAN(XalanNode)
> XALAN_USING_XALAN(XalanElement)
> XALAN_USING_XALAN(XalanDOMException)
> XALAN_USING_XALAN(XalanXPathException)
> XALAN_USING_XALAN(XPathParserException)
> XALAN_USING_XALAN(NodeRefList)
> //For Transformer
> XALAN_USING_XALAN(XalanCompiledStylesheet)
> XALAN_USING_XALAN(XalanDOMString)
> XALAN_USING_XALAN(XalanTransformer)
> XALAN_USING_XALAN(XSLTInputSource)
> XALAN_USING_XALAN(XSLTResultTarget)
> XALAN_USING_XALAN(XalanNamedNodeMap)
> XALAN_USING_XALAN(XalanStdOutputStream)
> XALAN_USING_XALAN(XalanOutputStreamPrintWriter)
> XALAN_USING_XALAN(FormatterToXML)
> XALAN_USING_XALAN(FormatterTreeWalker)
> XALAN_USING_XERCES(DOMDocument);
> XALAN_USING_XERCES(DOMElement);
> //XALAN_USING_XERCES(DOM_Node)
> XALAN_USING_XERCES(DOMText)
> XALAN_USING_XERCES(DOMDocumentType)
> XALAN_USING_XERCES(DOMDocumentFragment)
> XALAN_USING_XERCES(DOMTreeWalker)
> XALAN_USING_STD(stringstream)
> XALAN_USING_XERCES(MemBufInputSource)
> int
> mainX(int id, int argc, char *argv[])
> {
> char filenameBuffer[1024];
> XercesDOMSupport *theDOMSupportPtr;
> XercesParserLiaison *theLiaisonPtr;
> XalanDocument* theDocumentPtr;
> const char *text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n<note> \n \
> <to>Tove</to> \n\
> <from>Jani</from>\n\
> <heading>Reminder</heading>\n\
> <salutation>Dear</salutation>\n\
> <body>Don't forget me this weekend!</body> \n\
> </note>\n\
> ";
> std::stringstream oss;
> std::string tooutput;
> //XalanSourceTreeInit theSourceTreeInit;
> theDOMSupportPtr=new XercesDOMSupport;
> theLiaisonPtr= new XercesParserLiaison(*theDOMSupportPtr);
> MemBufInputSource inStream((XMLByte*)text, strlen(text), "Parser", false);
> const XalanDOMString errorStr;
> theDocumentPtr = theLiaisonPtr->parseXMLStream(inStream,errorStr);
> XMLCh tempStr[100];
> XMLString::transcode("LS", tempStr, 99);
> DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(tempStr);
> DOMWriter* theSerializer = ((DOMImplementationLS*)impl)->createDOMWriter();
> cout << "impl = " << impl << endl;
> cout << "theSerializer = " << theSerializer << endl;
> // optionally you can set some features on this serializer
> if (theSerializer->canSetFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true)) {
> theSerializer->setFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true);
> cerr << "can set it to discarddefaultcontent" << endl;
> }
> if (theSerializer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true)) {
> theSerializer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true);
> cerr << "can set it to formatprettyprint" << endl;
> }
> #if 0
> if (theSerializer->canSetFeature(XMLUni::fgDOMXMLDeclaration, false)) {
> theSerializer->setFeature(XMLUni::fgDOMXMLDeclaration, false);
> cerr << "can set it to declaration to false" << endl;
> }
> #endif
> XMLFormatTarget *myFormTarget;
> sprintf(filenameBuffer, "/tmp/xmy_tjk.%d.%d", getpid(), id);
> myFormTarget = new LocalFileFormatTarget(XMLString::transcode(filenameBuffer));
> DOMDocument* Domdoc = (DOMDocument*)theLiaisonPtr->mapToXercesDocument(theDocumentPtr);
> DOMNode *doc = Domdoc->getDocumentElement();
> Domdoc->setStandalone(true);
> Domdoc->normalize();
> bool rc = false;
> rc = theSerializer->writeNode(myFormTarget, *Domdoc);
> cerr << "rc from writeNote() = " << rc << endl;
>
> //delete theSerializer;
> theSerializer->release();
> delete myFormTarget;
> ifstream is;
> is.open (filenameBuffer);
> RWCString outStr;
> outStr.readFile (is);
> is.close();
> // outStr = outStr.strip(RWCString::both,'\n');
> cout << "value = " << endl << "'" << outStr << "'" << endl;
> return 0;
> }
> int
> main(int argc, char *argv[])
> {
> XMLPlatformUtils::Initialize();
> XalanTransformer::initialize();
> XPathEvaluator::initialize();
> int rc;
> rc = mainX(1, argc, argv);
> cout << "next take..." << endl;
> rc = mainX(2, argc, argv);
> XPathEvaluator::terminate();
> XalanTransformer::terminate();
> XMLPlatformUtils::Terminate();
> return rc;
> }
> -----------------------------------
> CC=/opt/studio11/SUNWspro/bin/CC -mt -pto -library=rwtools7_std -l++ -lCstd +w -DXMY_OPERATOR_INDEX_FIX -DUSE_NON_CONST -DXMY_TCL
> XERCESCROOT=/nafs/mynah/Vendor/xerces-c++/2.8.0/Sun/SunOS5.10
> XALANCROOT=/nafs/mynah/Vendor/xalan-c++/1.10.0-2.8.0/Sun/SunOS5.10
> #Include paths will be added here
> INCS=-I$(XERCESCROOT)/include -I$(XALANCROOT)/include
> LIBS= -L$(XERCESCROOT)/lib \
> -lxerces-depdom \
> -lxerces-c \
> -L$(XALANCROOT)/lib \
> -lxalan-c
> #Any compiler specific flags can be added here
> CFLAGS= -PIC -zmuldefs -DXTFUNCPROTO -DFUNCPROTO -D_POSIX_PTHREAD_SEMANTICS $(INCDIRS) -g
> all: tc
> clean:
> -rm -rf *.o *.so
> .SUFFIXES: .C .o
> tc.o: tc.C
> $(CC) $(CFLAGS) -c tc.C $(INCS)
> tc: tc.o
> $(PURIFY) $(CC) $(CFLAGS) -o $@ \
> tc.o \
> $(INCS) \
> $(LIBS)
> .KEEP_STATE:
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: c-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: c-dev-help@xerces.apache.org