суббота, 9 августа 2008 г.

extract() function gives a 'problem' whith spaces and lines in XML

I was developing a dequeue function for an XML file and I wanted to check if a certain returned value from the xml file was correct.
To retrieve the value of a tag I used this=>
v_text := v_record.extract('/record/Fruit/text()','xmlns="http://www.example.org"').getStringVal();

Ones I captured this record I wanted to check if the content of this tag was equal to, for example, some fruit, let’s say 'Lemon'.
In most of the cases I received the correct result, but there were some xml files which didn't gave me the correct result. Nevertheless I was pretty sure that the value in my xml file was 'Lemon'.
So what happened? I did some checks and then I found out that the syntax of this specific xml file was something like this:
<Fruit>Lemon
</Fruit>


When extracting the content out of the Fruit tag he also took the spaces, tabs and lines with it, and that was the reason why he thought that this wasn't a 'Lemon'

Conclusion, always use trim for the spaces and put some replace clauses for lines and tabs round the value. So you should use something like this:
v_text := replace(replace(replace(trim(v_record.extract('/record/Fruit/text()','xmlns="http://www.example.org"').getStringVal()),chr(10),''),chr(13),''),chr(9),'');

Комментариев нет: