[Résolu] Disparition de styles dans le contenu XML

Discussions à propos du traitement de textes Writer mais également sur l'éditeur HTML.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Silenzio
Fraîchement OOthentifié
Messages : 4
Inscription : 29 juil. 2013 14:24

[Résolu] Disparition de styles dans le contenu XML

Message par Silenzio »

Bonjour à tous,

Je dois récupérer certaines chaînes de caractère d'un document OpenOffice, celles sur lesquelles est appliqué un style particulier de paragraphe : pour cela, j'ai rédigé un petit programme qui va chercher dans le document XML produit par Open Office tous les nœuds XML correspondant à ces chaînes de caractères formatées de façon spécifique, nœuds qui se distinguent normalement par un attribut style-name spécifique.

Là où commence ma perplexité, c'est que même quand les styles sont correctement appliqués à l'intérieur du traitement de texte, l'information se perd en route très fréquemment dans le document content.xml, qui pourtant est le produit direct du traitement de texte : et je me retrouve avec de nombreux nœuds XML où l'attribut correspondant au style ne figure pas, alors même qu'il semble très correctement appliqué dans le traitement de texte.

En fait il y a une solution : pour obtenir que le style apparaisse dans le XML, je suis contraint à l'opération absurde qui consiste à appliquer à nouveau les styles de paragraphe sur le document OpenOffice pour obtenir leur apparition dans le XML -quand bien même ils ont déjà été appliqués par la personne qui me donne les documents, et sont reconnus par le traitement de texte ! Si je dois faire ça sur tous les documents qui me parviennent, où le formatage est justement censé permettre une récupération rapide des données, je n'ai pas fini de m'amuser...

L'un d'entre vous a t-il déjà eu cette expérience désagréable ? Quelle solution ?...

En vous remerciant pour toute aide éventuelle
Dernière modification par lawrence le 31 juil. 2013 11:03, modifié 2 fois.
Raison : Ajout de la coche verte
OpenOffice 3.4 sous Windows 7 Pro
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: Disparition de styles dans le contenu XML

Message par alhazred »

Bonjour,

Tout cela est bien abstrait : tu ferais mieux de joindre un exemple d'odt qui te pose ce problème.

Tu parles de styles de paragraphe. Apparaissent-ils dans la fenêtre du styliste ? (menu format Styles et formatages) ou bien ne s'agit-il que d'une mise en forme directe ?

Dans les deux cas, une recherche directe dans l'odt me semble envisageable et surtout bien plus simple (quitte éventuellement à l'automatiser par macro).
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Silenzio
Fraîchement OOthentifié
Messages : 4
Inscription : 29 juil. 2013 14:24

Re: Disparition de styles dans le contenu XML

Message par Silenzio »

Bonjour,

En effet, les styles apparaissent bien dans la fenêtre du styliste.

Je souscris totalement à l'idée qu'une question devrait s'appuyer sur un exemple d'.odt, je vais essayer de vous poster en un avec cette erreur, mais je peux déjà essayer d'être plus explicite.

Soit un style de Paragraphe appelé "N", appliqué dans le traitement de texte sur la phrase suivante : "Ceci est un exemple". Il apparaît dans la fenêtre du styliste. Dans le fichier content.xml, que l'on obtient en décompressant le fichier .odt, et qui n'est logiquement qu'une autre représentation du même contenu, le résultat normal serait de trouver quelque chose comme cela :

<text:p text:style-name="N"> Ceci est un exemple </text:p>.

Hé bien mon problème est qu'une fois sur deux, bien que l'application du style de paragraphe soit attesté dans la fenêtre du styliste, l'information du type de style appliqué au paragraphe n'est pas répercuté dans le document XML, et je me trouve avec

<text:p>Ceci est un exemple</text:p>

Je ne crois pas qu'une macro me permette de faire tout ce que je veux, car en fait il ne s'agit pas seulement d'extraire quelques chaînes de caractères, mais de convertir l'ensemble du texte dans un format .xml, et l'ensemble du document est stylé pour chaque style de paragraphe corresponde à une balise dans cette grammaire.

Cordialement,
OpenOffice 3.4 sous Windows 7 Pro
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: Disparition de styles dans le contenu XML

Message par alhazred »

Bonjour,

Lorsque j'ai parlé de macro, je pensais essentiellement à
Silenzio a écrit :l'opération absurde qui consiste à appliquer à nouveau les styles de paragraphe sur le document OpenOffice
Je te conseille en fait de joindre deux fichiers (tous les deux odt, si possible, plutôt que xml) : celui qui présente le problème et celui (corrigé) obtenu après ton intervention.
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Silenzio
Fraîchement OOthentifié
Messages : 4
Inscription : 29 juil. 2013 14:24

Re: Disparition de styles dans le contenu XML

Message par Silenzio »

D'accord ! Je joins deux exemples, extraits des documents sur lesquels je travaille, mais où j'ai simplement changé le texte. Le style qui n'apparaît pas au final dans le contenu .xml est ici intitulé NoteTopic, et ne concerne que le mot "Additions". Bien que les deux fichiers apparaissent strictement identiques - en tout cas à moi -, le .odt que j'ai corrigé, en appliquant tout simplement le style une fois de plus, produit un xml où l'information dont j'ai besoin figure, contrairement au premier...

S'il ne s'agissait que d'appliquer à nouveau le style que quelques fois sur quelques pages, ce ne serait pas un problème, mais les vrais documents sur lesquels je travaille sont assez lourds, et avec à chaque fois des centaines de styles dont j'ai besoin qu'ils figurent dans le xml.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 3.4 sous Windows 7 Pro
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: Disparition de styles dans le contenu XML

Message par alhazred »

Dans le xml original, les styles sont renommés dans la partie <office:automatic-styles> ... </office:automatic-styles> : NoteTopic devient P3 dans la suite.

Au plus simple (tu avais presque la solution) :
  1. Fais une recherche dans l'odt :
    • menu Édition > Rechercher & remplacer
    • bouton Plus d'options, coche Rechercher des styles
    • indique le style recherché (NoteTopic), puis bouton Tout rechercher
  2. Enfin applique le style NoteTopic à la sélection (double clic dans le Styliste.
La macro suivante, obtenue avec l'Enregistreur, automatise les étapes précédentes.

Code : Tout sélectionner

Sub ResetStyles
	Dim document   As Object
	Dim dispatcher As Object
	
	document   = ThisComponent.currentController.frame
	dispatcher = CreateUnoService("com.sun.star.frame.DispatchHelper")
	
	'Rechercher tous les paragraphes de style NoteTopic
	Dim args1(18) As New com.sun.star.beans.PropertyValue
	args1(0).Name = "SearchItem.StyleFamily"
	args1(0).Value = 2
	args1(1).Name = "SearchItem.CellType"
	args1(1).Value = 0
	args1(2).Name = "SearchItem.RowDirection"
	args1(2).Value = true
	args1(3).Name = "SearchItem.AllTables"
	args1(3).Value = false
	args1(4).Name = "SearchItem.Backward"
	args1(4).Value = false
	args1(5).Name = "SearchItem.Pattern"
	args1(5).Value = true
	args1(6).Name = "SearchItem.Content"
	args1(6).Value = false
	args1(7).Name = "SearchItem.AsianOptions"
	args1(7).Value = false
	args1(8).Name = "SearchItem.AlgorithmType"
	args1(8).Value = 0
	args1(9).Name = "SearchItem.SearchFlags"
	args1(9).Value = 65536
	args1(10).Name = "SearchItem.SearchString"
	args1(10).Value = "NoteTopic"
	args1(11).Name = "SearchItem.ReplaceString"
	args1(11).Value = "Alinéa négatif"
	args1(12).Name = "SearchItem.Locale"
	args1(12).Value = 255
	args1(13).Name = "SearchItem.ChangedChars"
	args1(13).Value = 2
	args1(14).Name = "SearchItem.DeletedChars"
	args1(14).Value = 2
	args1(15).Name = "SearchItem.InsertedChars"
	args1(15).Value = 2
	args1(16).Name = "SearchItem.TransliterateFlags"
	args1(16).Value = 1280
	args1(17).Name = "SearchItem.Command"
	args1(17).Value = 1
	args1(18).Name = "Quiet"
	args1(18).Value = true
	
	dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
	
	'Appliquer le style NoteTopic
	Dim args2(1) As New com.sun.star.beans.PropertyValue
	args2(0).Name = "Template"
	args2(0).Value = "NoteTopic"
	args2(1).Name = "Family"
	args2(1).Value = 2
	
	dispatcher.executeDispatch(document, ".uno:StyleApply", "", 0, args2())
	
End Sub
Si tu souhaites des informations sur cette macro, ou des améliorations (par ex. application à plusieurs styles), ouvre un nouveau sujet dans la section Macros et API (avec la balise [Writer] au début du titre, et indique les liens entre les deux sujets.
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Silenzio
Fraîchement OOthentifié
Messages : 4
Inscription : 29 juil. 2013 14:24

Re: Disparition de styles dans le contenu XML

Message par Silenzio »

En effet, je m'aperçois que tu m'avais donné tous les éléments dès ton premier message, si je ne m'en suis pas rendu compte c'est que j'ignorais qu'il existait la possibilité de faire une recherche par style dans l'onglet recherche... :oops: Ce qui facilite bien des choses !

Merci beaucoup d'avoir pris le temps d'éclairer ma lanterne, et également d'avoir écrit cette macro ! Je n'y connais rien du tout en macro Oo, alors je vais prendre le temps d'étudier un peu avant de poser des questions, mais je n'hésiterai pas à revenir vers vous, car cette première expérience sur ce forum m'a été aussi utile qu'agréable.

Je mets le sujet en [Résolu].

Bien cordialement.
OpenOffice 3.4 sous Windows 7 Pro