dans OOXML, le formatage tel que gras, italique, etc. peut être (et souvent de manière ennuyeuse) séparatif entre plusieurs éléments, comme:
<xsl:text disable-output-escaping="yes"><b></xsl:text>
4 Réponses :
Ce n'est pas vraiment une solution complète, mais c'est beaucoup plus simple que d'essayer de le faire avec Pure XSLT. En fonction de la complexité de votre source, cela pourrait ne pas être idéal non plus, mais cela vaut la peine d'essayer. Ces modèles:
<xsl:template match="w:p">
<p>
<xsl:apply-templates />
</p>
</xsl:template>
<xsl:template match="w:r[w:rPr/w:b]">
<b>
<xsl:apply-templates />
</b>
</xsl:template>
<xsl:template match="w:r[w:rPr/w:i]">
<i>
<xsl:apply-templates />
</i>
</xsl:template>
<xsl:template match="w:r[w:rPr/w:i and w:rPr/w:b]">
<b>
<i>
<xsl:apply-templates />
</i>
</b>
</xsl:template>
+1 pour le bon point de départ. Deux observations, les modèles créent des ambiguïtés (résolvables) (fixées dans ma réponse); Du point de vue du HTML ayant une telle sortie étrange (gras imbriqués comme) est irrévérblement et acceptable, même si un peu sale.
"Vous pouvez ensuite utiliser une manipulation de texte simple pour supprimer toutes les occurrences de B> et i> " ... peut-être que c'est une tâche pour HTML Tidy.
Peut-être, mais j'aurais pensé que HTML Tidy est probablement un peu excentrée à cet effet. Il ne devrait y avoir aucune ambiguïté, les spécifications XSLT sont assez claires sur la façon dont ces modèles devraient être remplacés.
Il y a même si résoluble. Essayez de compiler votre code avec Saxon par exemple.
Eh bien, il est assez facile de le rendre sans ambiguïté en remplaçant match = "w: r [w: rrr / w: b]" code> avec match = "W: R [W: RPR / W : B et non (w: rpr / w: i)] " code> par exemple, mais cela ne devrait pas vraiment être un problème.
Merci pour votre effort. Je cherche une solution dans laquelle je n'ai pas besoin d'avoir un autre processus, mais cela n'est peut-être pas possible.
@Flynn: un moyen plus propre de le rendre sans ambiguïté serait de mettre priority = "2" code> sur le modèle qui correspond w: r [w: rpr / w: i et w: rpr / w: b] code>. ( w3.org/tr/xslt#conflict ) (également +1 pour un Bon point de départ.)
ooxml fort> est une norme définie qui a Généralement (très généralement), le contenu d'un document WordML est principalement composé de Le modèle est beaucoup plus compliqué, mais vous pouvez commencer à travailler sur cette structure générale. P> Par exemple, vous pouvez commencer à travailler avec la transformation générale suivante (un peu). Notez qu'il gère uniquement les paragraphes avec un texte audacieux, italique et non ligné. P> xslt 2.0 strong> testé sous appliqué sur: p> produit: p> W: P code> (paragraphes) éléments contenant < Code> w: r code> fonctionne em> (région de texte avec les mêmes propriétés). À l'intérieur de chaque exécution, vous pouvez normalement trouver les propriétés de texte de la région ( w: rpr code>) et le texte lui-même ( w: t code>). P>
< P> L'effet secondaire du code HTML grotesque est inévitable, en raison du schéma de sous-calage WordML. Peut-être que la tâche consistant à rendre le dernier HTML beaucoup lisible pourrait être différé à certains utilisateurs conviviaux (et puissant) utilitaire comme HTML Tidy A >. p> p>
Merci pour tout le travail, mais j'ai déjà eu ceci. Mon problème et mon problème concernaient la génération de la production dans laquelle les balises de formatage sont combinées.
Eh bien c'est ce que la réponse fournit, je pense. Pouvez-vous être plus précis?
Elle veut des allures multiples contiguës de code>, par exemple, à s'effondrer dans un seul code>.
@Jacqueline: J'ai vu votre édition maintenant et je viens de réaliser votre intention maintenant. Peut-être que vous auriez pu nous avoir montré un peu de votre transformation. J'espère que vous acceptez la réponse @Larsh et upvote de manière responsable qui vous a aidé. Acclamations
Oui, désolé pour cette erreur. Je ne l'ai pas vu jusqu'à trop tard. J'apprécie définitivement l'aide. :)
Une autre approche, similaire à Flynn's, mais séjournant avec XSLT au lieu d'ajouter une couche de traitement de texte distincte, il s'agirait de transformer la sortie HTML initiale dans la même feuille de style pour réduire les éléments adjacents de En d'autres termes, la feuille de style générerait d'abord l'arborescence de résultat HTML initial, puis transmettez-la comme entrée sur un ensemble de modèles (à l'aide d'un mode spécial) qui effectué l'opération d'effondrement. P> mis à jour: strong>
Voici une feuille de style de travail, en 2 étapes, construite sur la feuille de style @ Empo Stage-1: p> Lorsque vous avez testé à nouveau l'entrée de l'échantillon que vous avez donnée, la feuille de style ci-dessus donne P > qui ressemble à ce que vous vouliez. p> p> code> ou code> dans des éléments uniques.
@Larsh - Cela ressemble à ma meilleure option jusqu'à présent - je préfère rester avec XSLT.
@Larsh: Merci de m'avoir introduit sur "deux étapes" Traitement de la feuille de style; Même si j'ai besoin de temps pour l'obtenir complètement. Aussi heureux que vous avez étendu ma transformation. :)
@empo: De rien. Le traitement à deux étages n'est que la composition de la fonction: f (g (x)) code>. C'était malheureusement gênant dans XSLT 1.0 mais est facile en 2.0.
@Jacqueline: terminé la feuille de style. Je ne sais pas pourquoi je t'ai appelé Jessica plus tôt. : -S
@empo: Sois juste content que je n'ai pas appelé son Jezebel ou quelque chose comme ça. :-)
@Jacqueline: Cette solution a ses limites ... E.G. Il ne va pas combiner mon b> camion b> i> code> dans mon camion i > b> code>, ni mon b> camion b> code> dans mon camion b> code> code >. Mais j'espère que c'est assez bon. Comme @empo a souligné, un navigateur ne se souciera pas de l'élégance des tags.
@Larsh - Merci beaucoup. Je sais que le navigateur ne se soucie pas de l'élégance des tags, mais malheureusement, la comparaison que nous faisons entre la volonté avant et post-ooxml. Le " mon b> camion b>" "" ne sera pas un problème, mais le " mon b> camion b> Je vais être. Je vais devoir me charger ce week-end ... avec un verre de vin :)
le résultat correct est produit fort>: p > <p>
<b>This is a </b>
<b>bold </b>
<b>
<i>with a bit of italic</i>
</b>
<b>
<i> and some more italic</i>
</b>
<i> and just italic, no-bold</i>
<b/>
<b>paragr</b>
<b>a</b>
<b>ph</b> with some non-bold in it too.</p>
+1. J'étais sûr que vous avez pu accomplir ceci :)). Un exemple de la façon dont les choses devraient être beaucoup plus simples dans XSLT 2.0 (devraient-ils être?) Sera très apprécié, si vous avez le temps et le testament. Merci
@empo: merci. Je ne vois pas comment une solution XSLT 2.0 pour ce problème pourrait être radicalement plus simple. En plus de ne pas avoir à utiliser xxx: Set de nœud () code> (une seule fois!) Entre les deux passes, il n'ya rien de plus qui puisse être simplifié. Peut-être utiliser Groupe-adjacent code> ... Mais ce n'est pas une simplification trop grande. Sans oublier que le @jacqueline ne veut pas une solution XSLT 2.0.
+1 - J'aimerais pouvoir upvouvert plus !!! Merci beaucoup. Cela fonctionne parfaitement. Vous avez définitivement gagné votre prime.
@Jacqueline: Vous êtes les bienvenus. Merci pour cette excellente question - la nuit dernière, je me suis senti heureux quand mon code a fonctionné. J'aime exactement un tel type de difficile, semblant presque impossible de résoudre des problèmes.
@Dimitrenrovatchev c'est brillant! Vous n'arrivez pas à avoir une feuille de style pour que l'inverse se produise? C'est à dire. Carte des marquages HTML dans OOXML?
@SilentsURFER, ce n'est pas un mappage de 1: 1, donc aucun cartographie «inverse» existe. Si quelqu'un spécifie strictement un tel mappage "inverse", à l'aide d'un analyseur HTML qui produit un modèle d'objet (tel que Tagsoup ou sgmlreader), on peut écrire une transformation qui prend en entrée l'arborese produite par l'analyseur HTML, et le transforme à l'ooxml correspondant. Evan Simpler est d'ouvrir le code HTML avec Word et d'enregistrer cela comme xml :)
Ce n'est pas clair pour moi comment (et pourquoi) vous allez utiliser
XSL: texte code>. Votre objectif est-il de convertir simplement l'OOXML que vous avez affiché dans le HTML?@empo - J'allais écrire l'étiquette de démarrage à l'aide de ' "où le formatage commence et écrivez l'étiquette finale de la même manière. Dans l'exemple ci-dessus, j'écris l'étiquette de démarrage '' avant de traiter la chaîne "Ceci est un", et j'écris " B>" après le traitement de la chaîne "pH".
@Jacqueline - En essayant de désactiver la sortie de sortie et d'écrire un balisage à la place des éléments, vous vous battez sur le modus operandi de XSLT et demandez un gros mal de tête. Bien que je suis d'accord sur le fait de le faire "à droite" n'est pas trivial.
@Larsh - Je suis tout à fait d'accord.
@Jacqueline: Il me semble qu'il y ait d'autres moyens plus simples d'effectuer la comparaison, sans produire le XML recherché. Accepteriez-vous une telle solution?
@Dimitre: Malheureusement, nous avons besoin de produire le XML aussi - il est utilisé par d'autres.
@Jacqueline: Vous n'avez besoin que de cette procédure difficile pour la comparaison. D'autres pourraient utiliser le XML non fusionné car il est équivalent à la fusillade. Des arguments contre cela?
@Dimitre: J'aime que vous pensiez, mais malheureusement, le dossier est envoyé à une autre partie qui fera également une comparaison contre la version pré-OOXML. Pardon... :(
@Jacqueline: NP. Je peux entrer une solution ces jours-ci, donc pas besoin d'accepter une réponse avant la date limite. :)
@Dimitre: J'attendrai-je avec impatience!
@Jacqueline: Excellente question, +1. S'il vous plaît voir ma réponse pour une solution complète et générique (aucun nom d'élément codé) XSLT 1.0 et son explication. :)