Parsing XML with XSLT

Here should go questions about transforming XML with XSLT and FOP.
crult
Posts: 20
Joined: Thu Jan 21, 2010 10:21 pm

Parsing XML with XSLT

Post by crult »

Hello,

I have a folder containing a large number of .xml files. Alternatively, i have also a .txt file that contains all these .xml like text. These documents come from newspaper's articles in xml format. There's is a sample:

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<Document xyurl="xyl://20040101N0076.xml"><Texte><P>Outre leurs activités habituelles, les hôpitaux ont dû faire face à une catastrophe exceptionnelle, durant l'été : la canicule, qui a provoqué 15 000 morts en août. Les urgentistes ont été les premiers à porter le drame sur la place publique. Près de 3 000 décès sont survenus dans des maisons de retraite et plus de 6 000 à l'hôpital ou en clinique, a révélé une étude de l'Institut national de la santé et de la recherche médicale (Inserm). Mais près de la moitié des personnes ayant trouvé la mort à l'hôpital venaient de maisons de retraite et de centres de long séjour. En reconnaissance de la « mobilisation exceptionnelle » des personnels hospitaliers ayant travaillé du 7 au 19 août, le ministère de la santé a annoncé, le 1er décembre, qu'une prime de 90 à 130 euros leur serait allouée. L'idée a été critiquée par des syndicats hospitaliers, qui soulignent la nécessité de donner des moyens « pérennes » aux hôpitaux.</P><P/></Texte></Document><?xml version="1.0" encoding="UTF-8"?>
<Document xyurl="xyl://20040101N0077.xml"><Texte><P>« C'est le plus beau réveillon de ma vie. » Alexis, passionné de spéléologie et d'escalade, a fêté Noël dans les arbres, parc Paul-Mistral, à Grenoble, et passera de la même façon le Nouvel An. Il est l'un des « accro-citoyens » qui, depuis plus de huit semaines, résistent au froid et même à la neige, perchés dans de drôles de petites cahutes faites de bâches en plastique. Ils espèrent empêcher l'abattage de 300 arbres, prévu dans le cadre de la construction du nouveau stade de football de l'agglomération.</P><P>Trois au départ, ils sont aujourd'hui une cinquantaine à se relayer jour et nuit pour assurer la garde des arbres parmi lesquels un orme champêtre, l'un des rares spécimens survivants d'une espèce décimée par la maladie de la graphiose. Originaires de Grenoble, ou venus d'ailleurs « par solidarité », ils passent une ou plusieurs nuits. Chômeurs, étudiants, intermittents du spectacle, routards ou saisonniers, beaucoup ont en commun la passion de la grimpe. Aucun n'est contre le football. Tous demandent un gel des travaux, la révision du projet et l'étude d'un nouvel emplacement. Ils souhaitent surtout que la population soit consultée.</P></Texte></Document>
As you can see there are many tags, but i'm interested in the tag <Texte> wich contains the main article. I'm searching for a XSLT scenario that allows me to:

* Export the contents of all the tags <Texte>. Only the contents (articles), without the tags. The result must be printed in a separate .txt file. If it's possible, to print leaving some space to separate the body of each article. Something like paragraphs.
* Parse each article contained in the tags <Texte>. The result must be printed in a separate .txt file that contains a list of all the words in the article, excluding the marks as . , : etc



Thank you for the help!
sorin_ristache
Posts: 4141
Joined: Fri Mar 28, 2003 2:12 pm

Re: Parsing XML with XSLT

Post by sorin_ristache »

Hello,
crult wrote: * Export the contents of all the tags <Texte>. Only the contents (articles), without the tags. The result must be printed in a separate .txt file. If it's possible, to print leaving some space to separate the body of each article. Something like paragraphs.
You have to create an XSLT stylesheet that reads the contents of all the XML files from a specified folder (which can be set as input parameter of the XSLT stylesheet) and writes to output (a file with a specified location or the standard output) the text content (without the tags).
crult wrote: * Parse each article contained in the tags <Texte>. The result must be printed in a separate .txt file that contains a list of all the words in the article, excluding the marks as . , : etc
You need a different XSLT stylesheet which outputs the text content of each XML file from a specified folder in a separate text file.

Please see the Oxygen user manual for the support for editing XSLT stylesheets and for running a transformation scenario based on an XSLT stylesheet.


Regards,
Sorin
george
Site Admin
Posts: 2095
Joined: Thu Jan 09, 2003 2:58 pm

Re: Parsing XML with XSLT

Post by george »

You can use the Saxon collection function to access all documents from a folder.
Then, the XSLT transformation to get the text inside Texte is simple, just match on that element and output its value with something like <xsl:value-of select="."/>
The further analysis that you need for the text files needs some more work. As you need to process text make sure you use XSLT 2.0.

For XSLT related questions (that are not specific to oXygen) there is a very active list hosted by Mulberry Technologies
http://www.mulberrytech.com/xsl/xsl-list/

Best Regards,
George
George Cristian Bina
crult
Posts: 20
Joined: Thu Jan 21, 2010 10:21 pm

Re: Parsing XML with XSLT

Post by crult »

Thank you very much for the help. I'll try to read and write some code. I'll give you the results to comment if there are some errors.

Best regards
Post Reply