| Author | Message | 
		
		  | mqceries | 
			  
				|  Posted: Fri Oct 04, 2013 7:48 am    Post subject: How to compare two xml values in esql |   |  | 
		
		  |  Acolyte
 
 
 Joined: 02 Dec 2011Posts: 70
 
 
 | 
			  
				| HI friends, 
 
 Now the requirement wont be as simple as the title. As part of development we have to compare two xml values and next steps follow on this condition. Problem is input xmls were not well formatted and most of the elements have values \t's and \n's at the end. I have been reading those values with LIKE and % at the end. Now i have to read those values into variables and compare them...
 
 <attributeOne>Value
 </attributeOne>
 
 while debugging i am seeing the value as Value\t\t\t\t\n (similar to this)
 
 and some elements are properly build
 
 <atrributeTwo>Value</attributeTwo>
 
 now i have to read these into variables and compare them..
 
 please help..
 
 we are using
 
 
 
   
	| Code: |  
	| 
 MB toolkit Version: 7.0.0.4
 Build id: 7.0.0.4-IFix-20120718_1357
 
 Broker : 7.0.0.4
 
 
 |  
 Thanks.
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | smdavies99 | 
			  
				|  Posted: Fri Oct 04, 2013 7:59 am    Post subject: |   |  | 
		
		  |  Jedi Council
 
 
 Joined: 10 Feb 2003Posts: 6076
 Location: Somewhere over the Rainbow this side of Never-never land.
 
 | 
			  
				| How are you parsing the input stream? 
 Some options
 
 1) If you are using XMLNSC to create your message tree you could always use the
 REPLACE function  to remove the offending characters.
 
 2) Read the message as a BLOB and REPLACE the bad text before you parse the BLOB into a message tree.
 
 3) Get the source of the messy XML to clean up their act.
 
 It does occur to me that we need an XML parser with the same functionality that DFDL brings to TDS/CSV data. Here we can try a series of options in the parsing. That would be a more elegant way of doing it.
 _________________
 WMQ User since 1999
 MQSI/WBI/WMB/'Thingy' User since 2002
 Linux user since 1995
 
 Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions.
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | Simbu | 
			  
				|  Posted: Fri Oct 04, 2013 8:10 am    Post subject: |   |  | 
		
		  |  Master
 
 
 Joined: 17 Jun 2011Posts: 289
 Location: Tamil Nadu, India
 
 | 
			  
				| If I'm correct, you are using XMLNS parser to parse your xml message. Correct me If i'm wrong 
 
 
   
	| Quote: |  
	| The XMLNS parser preserves all parts of an XML document, including white space formatting |  |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | mqceries | 
			  
				|  Posted: Fri Oct 04, 2013 9:14 am    Post subject: |   |  | 
		
		  |  Acolyte
 
 
 Joined: 02 Dec 2011Posts: 70
 
 
 | 
			  
				| Yes i am using XMLNSC... tried REPLACE function before but not able to get the desired results... 
 Thanks and appreciate your replies..
    |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | dogorsy | 
			  
				|  Posted: Fri Oct 04, 2013 9:31 am    Post subject: |   |  | 
		
		  | Knight
 
 
 Joined: 13 Mar 2013Posts: 553
 Location: Home Office
 
 | 
			  
				| 
   
	| Quote: |  
	| tried REPLACE function before but not able to get the desired results... 
 
 |  can you please elaborate?... what does your code look like ?, have you looked at a user trace to see why you are not getting the desired results ?
 smdavies99 suggestion of reading the message as a BLOB is a good one, remove the offending chars and then parse as XML, have you tried it ?
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | kimbert | 
			  
				|  Posted: Fri Oct 04, 2013 10:13 am    Post subject: |   |  | 
		
		  |  Jedi Council
 
 
 Joined: 29 Jul 2003Posts: 5543
 Location: Southampton
 
 | 
			  
				| 
  Well, you could do that with any domain, including XMLNSC. In fact, the question is not even an XML question really ( except that the OP's actual problem comes from an XML input message ). 
	| Quote: |  
	| 1) If you are using XMLNSC to create your message tree you could always use the REPLACE function to remove the offending characters. |  
 The question could be put like this: I have an element in the message tree with a CHARACTER value, but it might contain leading and trailing white space. How do I trim off any leading and trailing whitespace so that I can reliably compare the value with a constant CHARACTER value?
 
 Hopefully that gives you a strong hint about which string function to search for in the info center. If not, feel free to ask.
 _________________
 Before you criticize someone, walk a mile in their shoes. That way you're a mile away, and you have their shoes too.
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | kimbert | 
			  
				|  Posted: Fri Oct 04, 2013 10:17 am    Post subject: |   |  | 
		
		  |  Jedi Council
 
 
 Joined: 29 Jul 2003Posts: 5543
 Location: Southampton
 
 | 
			  
				| I do not recommend the parse-as-BLOB solution. That might trim away white space that is not 'padding' ( not leading or trailing ). So the value of this tag: 
  would become 
 when the correct result would be 
	| Code: |  
	| <value>   one two three   </value> |  _________________
 Before you criticize someone, walk a mile in their shoes. That way you're a mile away, and you have their shoes too.
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | smdavies99 | 
			  
				|  Posted: Fri Oct 04, 2013 10:20 am    Post subject: |   |  | 
		
		  |  Jedi Council
 
 
 Joined: 10 Feb 2003Posts: 6076
 Location: Somewhere over the Rainbow this side of Never-never land.
 
 | 
			  
				| 
   
	| kimbert wrote: |  
	| I do not recommend the parse-as-BLOB solution. That might trim away white space that is not 'padding' |  
 That's why I suggested option 3) above.
 
 I'd really try to get the input data cleaned up before it hits Broker. The other methods are purely a hack to get round the problem. Not elegant and not nice but sometimes it is the only way.
 _________________
 WMQ User since 1999
 MQSI/WBI/WMB/'Thingy' User since 2002
 Linux user since 1995
 
 Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions.
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | mqceries | 
			  
				|  Posted: Fri Oct 04, 2013 10:53 am    Post subject: |   |  | 
		
		  |  Acolyte
 
 
 Joined: 02 Dec 2011Posts: 70
 
 
 | 
			  
				| we have a time constraint and they are not listening to clean up the xml before they send to us.. 
 Did a work around as planned (thought not to entertain them ,but had to).
 
 parsed X'0A' and X'09' new line and horizontal tab parsed then used REPLACE twice and finally TRIM to make sure..
 
 In case if this helps later on..
 
 
 
   
	| Code: |  
	| 
 DECLARE cNewLine CHAR CAST(X'0A' AS CHARACTER  CCSID InputRoot.Properties.CodedCharSetId ENCODING InputRoot.Properties.Encoding);
 DECLARE tTabChar CHAR CAST(X'09'  AS CHARACTER  CCSID InputRoot.Properties.CodedCharSetId ENCODING InputRoot.Properties.Encoding);
 
 SET EV.PData7=REPLACE(EV.PData,cNewLine,'');
 SET EV.PData8=REPLACE(EV.PData7, tTabChar,'');
 SET EV.PData9=TRIM(EV.PData8);
 
 Result:
 
 Pdata  value\n\t\t
 value\t\t
 value
 Pdata
 
 
 |  
 
 SET EV.PData9=TRIM(EV.PData8);
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | dogorsy | 
			  
				|  Posted: Fri Oct 04, 2013 10:03 pm    Post subject: |   |  | 
		
		  | Knight
 
 
 Joined: 13 Mar 2013Posts: 553
 Location: Home Office
 
 | 
			  
				| 
   
	| kimbert wrote: |  
	| I do not recommend the parse-as-BLOB solution. That might trim away white space that is not 'padding' ( not leading or trailing ). So the value of this tag: 
  would become 
 when the correct result would be 
	| Code: |  
	| <value>   one two three   </value> |  |  
 yes, sorry, I misunderstood the input value, I though the OP meant the character string "Value\t\t\t\t\n" but that means Value followed by special characters.. not very well explained.
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  |  |