× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



IE thinks that the XML is properly formed.



I'll try the
chars = %Subst( charsUCS2: 1:stringLen );

I'm currently doing the chars = charsUCS2 assignment and then using (stringLen/2) to parse out chars.



-----Original Message-----
From: Jon Paris [mailto:jon.paris@xxxxxxxxxxxxxx]
Sent: Monday, December 01, 2014 2:49 PM
To: Rpg400 Rpg400-L
Subject: Re: XML-SAX parsing issue

Although I can't see why it would screw things up Justin, you should never simply code chars = charsUCS2;

You must delimit the string by stringLen - there will potentially be a bunch of garbage in the back end of charsUCS2 which could cause a burp in the character conversion.

So it should always be:

chars = %Subst( charsUCS2: 1:stringLen );

And you should only be performing that assignment if stringLen is > 0;

Can't see from your code but assumedly you are only doing this assignment when the event code says that you have UCS2 data?

Would also suggest (for other reasons) that you change the definition of chars to be varying length - then you won't need to be trimming it or whatever as you go along.


Jon Paris

www.partner400.com
www.SystemiDeveloper.com

On Dec 1, 2014, at 2:18 PM, Justin Taylor <JUSTIN@xxxxxxxxxxxxx> wrote:

I'm having this weird issue parsing XML. The XML is generated in-house on Windows and parses properly the vast majority of the time. I have the rare XML file where I lose all the data past some point. Here are some (hopefully) relevant code snippets.

.......................................................................................................................................................

XML-SAX %handler(cjfSaxHandler :handlerInfo)
%xml(FilePath :'doc=file ccsid=ucs2');
.......................................................................................................................................................
P*--------------------------------------------------
P* Procedure name: cjfSaxHandler
P* Purpose: Parse XML data for CJF
P* Returns: Return code
P*--------------------------------------------------
P cjfSaxHandler b
D pi 10i 0
D info LikeDs(gHandlerInfo)
D event 10i 0 Value
D stringPtr * Value
D stringLen 20i 0 Value
D exceptionId 10i 0 Value

Dcl-s charsUCS2 ucs2(65535) Based(stringPtr);
D chars s 65535a

chars = charsUCS2;
.......................................................................................................................................................


Debugging the code, the "chars = charsUCS2" statement works fine, until a point. From then on, chars is always blank even though charsUCS2 has a value. It appears that the XML events are working properly. I eye-balled the XML and I can't see anything wrong with it. I don't even know where to go with this.

Any ideas?
--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at http://archive.midrange.com/rpg400-l.




As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.