DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6969>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6969 parse of in-memory stream can't handle adjacent elements with no white space between them Summary: parse of in-memory stream can't handle adjacent elements with no white space between them Product: Xerces-C++ Version: 1.6.0 Platform: PC OS/Version: Windows NT/2K Status: NEW Severity: Blocker Priority: Other Component: Non-Validating Parser AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] There are actually two problems: 1. If I have an XML document like this <?xml version='1.0' encoding='UTF-8' standalone='no'?><fred/> an in-memory non-validating parse using MemBufInputSource chokes on it, giving the error: line 1, column 56: Expected an element name. But if I insert a space or newline after the XML declaration, like this <?xml version='1.0' encoding='UTF-8' standalone='no'?> <fred/> the document parses without any difficulty. 2. In the 2nd case above, in which the document parses okay, the resultant document yields a null root element. However, if I take that exact same text and put it in a file and parse the file, I get a good root element. Either version of the text above, if parsed from a file, yields a good root element. Here's some sample code that demonstrates the problem: --- #include "stdafx.h" #include "MyException.h" #include "MyErrorHandler.h" // Application-wide ininitialization and termination of Xerces XML parser. namespace { struct XmlInit { XmlInit() { XMLPlatformUtils::Initialize(); } ~XmlInit() { XMLPlatformUtils::Terminate(); } } xmlInit; CMySaxErrorHandler ErrHandler; } void GetDOMStringData(const DOMString& domString, std::wstring& wstrData) { wstrData.erase(); unsigned int nStrlen = domString.length(); for (unsigned int i = 0; i < nStrlen; ++i) { wstrData += domString.charAt(i); } } LPCWSTR wszTestContentGood = L"<?xml version='1.0' encoding='UTF-8' standalone='no'?> <fred/>"; LPCWSTR wszTestContentBad = L"<?xml version='1.0' encoding='UTF-8' standalone='no'?><fred/>"; int wmain(int argc, wchar_t* argv[]) { int nResult = 0; try { DOMParser parser; // Configure parser for a validating parse. parser.setErrorHandler(&ErrHandler); parser.setDoSchema(false); parser.setValidationScheme(DOMParser::Val_Never); std::wcout << L"Parsing in-memory version of 'Good Test Stream'..." << std::endl; parser.parse(MemBufInputSource(reinterpret_cast<const XMLByte*> (wszTestContentGood), wcslen(wszTestContentGood) * sizeof(wchar_t), L"Good Test Stream")); DOM_Document document = parser.getDocument(); DOM_Element root = document.getDocumentElement(); if (root.isNull()) { std::wcout << L"In-memory 'Good Test Stream' yields null root element" << std::endl; } else { std::wstring wstrTagname; GetDOMStringData(root.getNodeName(), wstrTagname); std::wcout << L"In-memory 'Good Test Stream yields good root element '" << wstrTagname << L"'" << std::endl; } parser.reset(); std::wcout << L"Parsing file version of 'Good Test Stream'..." << std::endl; // GoodContent.xml contains the same text as the in-memory version of 'Good Test Stream.' parser.parse(LocalFileInputSource(L"GoodContent.xml")); document = parser.getDocument(); root = document.getDocumentElement(); if (root.isNull()) { std::wcout << L"File version of 'Good Test Stream' yields null root element"; } else { std::wstring wstrTagname; GetDOMStringData(root.getNodeName(), wstrTagname); std::wcout << L"File version of 'Good Test Stream yields good root element '" << wstrTagname << L"'" << std::endl; } parser.reset(); std::wcout << L"Parsing in-memory variant: 'Bad Test Stream'..." << std::endl; parser.parse(MemBufInputSource(reinterpret_cast<const XMLByte*> (wszTestContentBad), wcslen(wszTestContentBad) * sizeof(wchar_t), L"Bad Test Stream")); } catch (const CMyException& e) { std::wcout << e << std::endl; nResult = e.GetCode(); } return nResult; } --- When I run this program (after , I get: --- Parsing in-memory version of 'Good Test Stream'... In-memory 'Good Test Stream' yields null root element Parsing file version of 'Good Test Stream'... File version of 'Good Test Stream yields good root element 'fred' Parsing in-memory variant: 'Bad Test Stream'... Parse operation: Fatal error parsing file "Bad Test Stream", line 1, column 56 Message: Expected an element name; error = 0x3 --- If this is not enough information, please let me know. Unfortunately, this web page doesn't have a means of attaching files. I'll let you have the rest of my source code (error handler & exception object) if you wish. thanks, tim --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
