none
XML mélangé : comment traiter ? RRS feed

  • Discussion générale

  • Bonjour tout le monde,

    Existe-t-il un objet adapté pour traiter un document qui contient des balises de type XML, mais pas seulement ?

    Je pense par exemple (mais je suis sûr qu'on peut trouver beaucoup d'autres exemples), à une page ASPX, où on trouve des balises <asp:control></asp:control>, mais si vous voulez charger ça dans un XMLDocument, vous pouvez vous accrocher, ça bloque déjà au deuxième caractère, et vous pouvez vous attendre à ce que même en passant les balises de type en début de document, les balises HTML ne passent pas nécessairement. A la limite on peut faire attention de faire du XHTML, mais les balises ASPX étant intercalées, ça ne va pas respecter toujours la logique XML. Pour autant, en ignorant ce qui se trouve entre deux balises ASP, on devrait finir par arriver à du XML propre, de façon à être en mesure de gérer proprement les ressources associées, par exemple (il faut bien reconnaître que ce qui existe pour ouvrir un fichier de ressources, pour saisir des textes de quelques lignes, en ayant sous les yeux les textes en deux langues pour les relire facilement, ce n'est pas le top ; pas aussi mauvais que les traductions automatiques, mais quand même).

    Alors, pour traiter le XML mélangé, commencer par filtrer ?

    mercredi 17 juillet 2013 22:31

Toutes les réponses

  • Bonjour  Gloops,

    <asp:control> </asp:control> est une balise XML valide.  As-tu essayer de déclarer dans ton document l'espace de nom dont l'étiquette est asp ?

    Peux-tu mettre à disposition un exemple du document que tu veux parser ?

    mercredi 17 juillet 2013 23:07
  • Effectivement, ça pourrait être plus concret pour les gens qui ne font pas de développement web, bien que je suis persuadé qu'une bonne partie d'entre eux ont déjà rencontré d'autres exemples de documents avec des balises XML dans lesquels il pourrait être intéressant de faire quelque chose qui s'apparenterait à de la sélection XPath, mais une astérisque mal placée empêche de charger le document dans un objet XML.

    Alors puisqu'il s'agit d'introduire le sujet on va commencer par quelque chose de simple, et ensuite si on veut avoir une idée de comment les choses peuvent se gâter il suffit de consulter la documentation du contrôle Repeater (pour situer, nous allons rencontrer des balises XML qui vont se croiser, une balise va être ouverte avant que la précédente soit fermée, même l'Intellisense s'y perd).

    Pour le moment voici la source de la page http://www.zailes.org/NomImage/NomImage.aspx

    Lorsqu'un contrôle ASP.Net, qui donc est représenté par une balise de type XML dont le nom commence par ASP:, comporte une propriété meta:resourcekey, le contenu de cette propriété est ce qu'on appelle le nom d'une ressource, en fait une clé qui représente un texte. A l'affichage, le serveur va aller chercher ce texte dans un fichier de ressources, qui sera choisi en fonction de la langue demandée. La langue est choisie selon un mécanisme en plusieurs étapes qui commence par les options du navigateur utilisé pour la lecture, et qui peut se poursuivre par une sélection par l'utilisateur à l'aide d'une liste déroulante, j'imagine qu'il n'est pas indispensable de développer davantage.

    Le répertoire où se trouve ce fichier ASPX comporte un sous-répertoire App_LocalResources, qui va contenir pour cette page un fichier par culture supportée. Puisque la page est écrite en Anglais, le fichier NomImage.aspx.resx va contenir les textes en Anglais. Comme la traduction en Français est proposée, le fichier NomImage.aspx.fr.resx va contenir les textes en Français. Le jour où je vais me décider à la traduire en Allemand, je vais créer un fichier NomImage.aspx.de.resx, et ainsi de suite.

    Lorsqu'on ouvre un fichier de ressources avec les outils proposés, on le voit apparaître sous la forme de trois colonnes : dans la première le nom de la ressource (celui que contient la page dans la propriété meta:resourcekey du contrôle qui va afficher ce texte), dans la deuxième colonne le texte, et dans la troisième ... non non, ceux qui disent la traduction commencent à s'endormir, dans la troisième colonne un commentaire.

    Il me paraîtrait intéressant d'écrire un programme de type Winform, qui va commencer par inviter l'utilisateur à choisir la source d'une page ASP.Net à l'aide d'une boîte de dialogue OpenFileDialog, et ensuite va soit créer soit aller récupérer les fichiers de ressources dans le répertoire qui va bien, pour proposer, ressource par ressource, les textes correspondants dans un TextBox, un pour la langue d'origine en haut, un pour la traduction en bas, avec sélection de la langue de traduction. Une fois qu'on en est là on peut aussi décider de pousser le bouchon jusqu'à présenter trois langues d'un coup, ça c'est un autre débat. Et donc dans un coin du formulaire un jeu de flèches pour passer d'un enregistrement à l'autre.

    Alors bien entendu, on peut, pas trop difficilement, appliquer la méthode bête et méchante consistant à ouvrir le fichier à l'aide d'un TextReader, le démarrer avec l'oreille fermée, lorsqu'on rencontre <asp:, ouvrir l'oreille jusqu'à rencontrer </asp: suivi du même nom de type de contrôle, et là mémoriser ce qu'on a entendu. Les termes sont un peu allégoriques mais j'imagine que ça ne nuit pas à la compréhension.

    Cela étant quand on a fait des transformations XSLT on se dit qu'il y a peut-être des façons plus intelligentes de traiter la question ?

    Alors donc j'avais annoncé la source de la page :

    <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="NomImage.aspx.cs" Inherits="NomImage" Title="Untitled Page" Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    	<p class="SousTitrePrinc"><asp:Label id="SousTitrePrinc" runat="server" Text="NomImage" meta:resourcekey="SousTitrePrinc"></asp:Label></p>
    	<p><asp:Label id="Texte1_01" runat="server"
    	 Text="Let us imagine a certain number of images have been created in a software dedicated to that, and that we want to save them in a numerated and coherent series, that the software has forgotten to implement." meta:resourcekey="Texte1_01"></asp:Label></p>
    	<p><asp:Label id="Texte1_02" runat="server"
    	 Text="Each file name will first contain the name of the series -what is common to all the series- then the date, the number of the file in the series, and to finish with, the type of the file (that must begin with a dot)." meta:resourcekey="Texte1_02"></asp:Label></p>
    	<p><asp:Label id="Texte1_03" runat="server"
    	 Text="The date will appear in the format year (four digits), month (two digits), day (two digits), so that the alphanumeric sorting is equivalent to the chronological sorting. This signifies that you can reuse the name of the series another day, and thus follow the series, that will appear in the chronological order if the directory is
    classified alphabetically." meta:resourcekey="Texte1_03"></asp:Label></p>
    	<p><asp:Label id="Texte1_04" runat="server"
    	 Text="The number of the file in the series appears by default with two digits, it is possible to change this value thanks to an horizontal lift control. This is a way to adapt to the number of images that has to be saved. In case of doubt about his number, it is better to be generous about the number of digits." meta:resourcekey="Texte1_04"></asp:Label></p>
    	<p><asp:Label id="Texte1_05img" runat="server"
    	 Text="<img style='width: 283px; height: 22px;' alt='Number of digits for the number' src='NbChiffres.JPG' />" meta:resourcekey="Texte1_05img"></asp:Label></p>
    	<p><asp:Label id="nota" runat="server"
    	 Text="For the moment being, this program is
    available in French. Programs will be translated in the order this will be requested." meta:resourcekey="nota"></asp:Label></p>
    	<p><asp:Label id="notatrait" runat="server" Text="The following refers to two dialog boxes  : " meta:resourcekey="notatrait"></asp:Label></p>
    <ul>
    	<li><asp:Label id="li1_1" runat="server" meta:resourcekey="li1_1">"save as" in the image creation software, and </asp:Label></li>
    	<li><asp:Label id="li1_2" runat="server" meta:resourcekey="li1_2"> the dialog box shown by the NomImage program (illustration hereunder). </asp:Label></li>
    </ul>
    	<p><asp:Label id="Texte2_01" runat="server"
    	 Text="For more clarity, the instructions about the image creation software will be displayed <span class='FondVert'>on green background </span>." meta:resourcekey="Texte2_01"></asp:Label></p>
    	<p><asp:Label id="Texte2_02" runat="server"
    	 Text="After loading the NomImage program, the first thing to do is to seize the name of the image series. <span class='FondVert'>After that, select the program where the images to save are, for example by clicking on its window or its icon (in Windows XP, the icons are in the taskbar).</span>" meta:resourcekey="Texte2_02"></asp:Label></p>
    	<p><asp:Label id="Texte2_03" runat="server"
    	 Text="<span class='FondVert'>Launch the save command, as mentionned by the documentation of the image creation program. Once the 'save as' dialog box is opened, depress the F11 key. The selected zone (by default where you type the filename) is completed with the name</span> as it appears in the NomImage dialog box, and simultaneously the counter is incremented of 1 for the next picture. The place where the name appears in the NomImage dialog box is squared in red on the illustration, for more clarity." meta:resourcekey="Texte2_03"></asp:Label></p>
    <!-- autre ¤¤¤¤¤¤¤¤¤¤¤¤ : --> <br />
    	<p><asp:Label id="Texte2_05" runat="server"
    	 Text="According to the checkboxes that are checked on the right (see the illustration), <span class='FondVert'>the Ctrl A keys can be sent before the file name (which has for results that the whole zone is selected before typing the name, so that the previous name is replaced), and the Enter key can be sent afterwards (which generally has for effect to validate the saving).</span>" meta:resourcekey="Texte2_05"></asp:Label></p>
    	<p><asp:Label id="nota1" runat="server"
    	 Text="Nota : The F11 key reacts in a delay of half a second. This delay avoids to send several successive names in the 'save as' dialog box. One brief depression on the key is suffisant, and then half a second of patience." meta:resourcekey="nota1"></asp:Label></p>
    	<p><asp:Label id="Texte3_01" runat="server"
    	 Text="In case of mismatch, it is possible to correct the number of the current image. The + button, above the seizing zones in the NomImage dialog box, allows you to increase the number of 1. The - button underneath allows to decrease the number of 1. It is also possible to seize a value directly in the number zone. This value is taken in account when you leave the seizing zone." meta:resourcekey="Texte3_01"></asp:Label></p>
    	<p><asp:Label id="Texte3_03" runat="server"
    	 Text="Once all the images are saved, you can close the NomImage program, that stayed opened during the operations." meta:resourcekey="Texte3_03"></asp:Label></p>
    	<p><asp:Label id="nota2" runat="server"
    	 Text="Attention, this program runs by key simulations. You can obtain a different results according to the state of the keyboard (caps lock, num lock)." meta:resourcekey="nota2"></asp:Label></p>
    	<p><asp:Label id="Texte4_01" runat="server" Text="4-01" meta:resourcekey="Texte4_01"></asp:Label></p>
    	<table><tbody><tr>
    		<td><asp:Label id="td1" meta:resourcekey="td1" runat="server"><a href="http://www.zailes.org/Data/NomImage.exe">NomImage</a></asp:Label></td>
    		<td><asp:Label id="td2" meta:resourcekey="td2" runat="server">This program requires the VB execution kit. This is available on Microsoft's site, or installed with other programs of this site, which are proposed with an installation program.</asp:Label></td>
    </tr></tbody></table>
    	<p><asp:Label id="lienprinc" runat="server"
    	 Text="<a href='../home.aspx'>Go to the main page</a>" meta:resourcekey="lienprinc"></asp:Label></p>
    	<p><asp:Label id="valid" runat="server"
    	 Text="<a href='http://validator.w3.org/check?uri=referer'><img src='http://www.w3.org/Icons/valid-xhtml10' alt='Valid XHTML 1.0 Transitional' height='31' width='88' /></a>" meta:resourcekey="valid"></asp:Label></p>
    	<p><asp:Label id="lblTitre" runat="server" Visible="false" Text="Name files with a numeration" meta:resourcekey="lblTitre"></asp:Label></p>
    </asp:Content>



    • Modifié Gloops jeudi 18 juillet 2013 01:17 grammaire
    jeudi 18 juillet 2013 00:29
  • Je compatis pour ceux qui devront, à chaque ligne, descendre de trois écrans pour manipuler l'ascenseur horizontal, remonter de trois écrans pour lire le deuxième tiers de la ligne, et ensuite remettre ça pour le troisième tiers, avant de descendre de trois écrans pour revenir à gauche pour la ligne suivante.

    Oh mais un certain nombre vont abandonner et copier tout ça dans un bloc notes ...

    jeudi 18 juillet 2013 01:29
  •  Bonjour

    Trouver une classe qui peut interpréter du texte « presque » XML sera quelque chose difficile.

    Je vous propose d’utiliser les outils système pour générer les fichiers de ressources.

    Ici vous avez des détails sur comment vous pouvez la faire avec Visual Studio :

    http://msdn.microsoft.com/fr-fr/library/ms247246(v=vs.80).aspx

    Apres ça, ici vous avez un exemple d'éditeur des ressources:

    http://www.codeproject.com/Articles/16068/Zeta-Resource-Editor

    Malheureusement je n’ai pas trouvé un  outil système (.exe) pour générer automatique les fichiers resx à partir d’un fichier aspx.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    jeudi 18 juillet 2013 07:40
  • Merci pour ces précieuses infos.

    Oui, le premier lien correspond hélas à la façon dont j'ai construit mon site. Et encore, la création des fichiers de ressources, pour être améliorable, n'est pas le point qui pêche le plus, c'est plutôt la saisie des textes à l'intérieur. Il faut créer une ligne en saisissant le nom de ressource, la valider, puis la ligne étant sélectionnée,  placer le curseur en bas de la ligne dans la marge, sur la séparation des lignes, par un glissé de souris l'agrandir du peu que la hauteur disponible le permet, glisser vers le bas grâce à l'ascenseur pour dégager un peu de hauteur en bas, et renouveler l'opération le nombre de fois nécessaire pour pouvoir taper son texte, et cela pour chacun des textes de la page. Recommencer à chaque modification, cette fois plus facilement dans la mesure où il existe des lignes en dessous qui font de la place (mais pas pour les dernières lignes bien entendu).

    Le Zeta Resource Editor d'Uwe Keim, d'après sa description me paraît apporter un net plus sur la dernière phase, la saisie des textes. Avec en plus l'avantage de présenter plusieurs langues côte à côte. D'ailleurs on dirait que je pose ma question au bon moment, puisque c'est en ligne depuis une dizaine de jours. Je sens que je ne vais pas tarder à mettre ça en pratique.

    Du coup, il se peut que j'abaisse un peu la priorité du pseudoXml, ce qui va m'éviter de tout faire en même temps.

    Comme je disais la gestion des fichiers de ressources pour une page aspx est un exemple de cas où l'exploitation de balises XML valides dans un fichier, n''est pas possible parce que le fichier, lui, n'est pas un fichier XML valide.  J'imagine que l'approche "bête et méchante" devra bien être mise en œuvre une fois par quelqu'un, pour qu'on puisse ensuite aller récupérer les balises dans un objet XML. Je verrais bien chaque balise avoir une propriété _Trail, qui contiendrait le texte qui la suit jusqu'à la prochaine balise valide. Ce qui précède la première balise valide se retrouverait vraisemblablement dans une propriété dédiée de l'objet PseudoXML.

    Telle quelle l'idée est un peu brouillonne, car il reste à voir ce qu'on fait avec un fichier qui commence par une balise ouverte, qui n'est pas fermée jusqu'à la fin du fichier. Dans le cas de l'aspx on restreindrait la sélection des balises à traiter à un nom de domaine, ça peut être une piste de réflexion.

    jeudi 18 juillet 2013 08:36
  • Ah, dommage ...
    Le ZetaResourceEditor, au moment d'ouvrir un projet rencontre une erreur de violation, tentative de lecture ou d'écriture de mémoire protégée, et ne peut pas aller plus loin.

    Je ne peux pas le déboguer, car Visual C# 2010 Express refuse de charger une partie des projets de la solution (à ce que je vois il y a une partie Windows et une partie Web, donc ce n'est pas très étonnant), et Visual Studio 2005 ne peut rien charger du tout.
    jeudi 18 juillet 2013 09:23
  • Bonjour,

    L'exemple est plus parlant. Effectivement, il s'agit d'un document qui ne respecte pas la syntaxe XML.  Cf. § 2.4 du standard XML.  Il ne  peut donc être analysé par un Parser XML standard!  En première analyse, la non conformité vient de 2 fautes:

    1 - la présence de la balise <%@ .... %> en début de document. Ceci n'est pas une construction XML légale. Seul le Parser ASP peut l'interpréter.

    2 - l'utilisation dans la valeur des attributs des caractères < et > utilisés tel quel, alors qu'ils auraient du être codés respectivement: &lt; et &gt;  Question quel est l'outil qui produit ces attributs ?  

    Moyennant le remplacement des < et > mal placés par &lt; et &gt; et en commentant la forme <%@ ... %>, le document depuis tout à fait analysable par un parser standard.; mais sanss doute plus par le Parser ASP :-( 

    Document modifié:

    <!-- <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="NomImage.aspx.cs" Inherits="NomImage" Title="Untitled Page" Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %> -->
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    	<p class="SousTitrePrinc"><asp:Label id="SousTitrePrinc" runat="server" Text="NomImage" meta:resourcekey="SousTitrePrinc"></asp:Label></p>
    	<p><asp:Label id="Texte1_01" runat="server"
    	 Text="Let us imagine a certain number of images have been created in a software dedicated to that, and that we want to save them in a numerated and coherent series, that the software has forgotten to implement." meta:resourcekey="Texte1_01"></asp:Label></p>
    	<p><asp:Label id="Texte1_02" runat="server"
    	 Text="Each file name will first contain the name of the series -what is common to all the series- then the date, the number of the file in the series, and to finish with, the type of the file (that must begin with a dot)." meta:resourcekey="Texte1_02"></asp:Label></p>
    	<p><asp:Label id="Texte1_03" runat="server"
    	 Text="The date will appear in the format year (four digits), month (two digits), day (two digits), so that the alphanumeric sorting is equivalent to the chronological sorting. This signifies that you can reuse the name of the series another day, and thus follow the series, that will appear in the chronological order if the directory is
    classified alphabetically." meta:resourcekey="Texte1_03"></asp:Label></p>
    	<p><asp:Label id="Texte1_04" runat="server"
    	 Text="The number of the file in the series appears by default with two digits, it is possible to change this value thanks to an horizontal lift control. This is a way to adapt to the number of images that has to be saved. In case of doubt about his number, it is better to be generous about the number of digits." meta:resourcekey="Texte1_04"></asp:Label></p>
    	<p><asp:Label id="Texte1_05img" runat="server"
    	 Text="&lt;img style='width: 283px; height: 22px;' alt='Number of digits for the number' src='NbChiffres.JPG' /&gt;" meta:resourcekey="Texte1_05img"></asp:Label></p>
    	<p><asp:Label id="nota" runat="server"
    	 Text="For the moment being, this program is
    available in French. Programs will be translated in the order this will be requested." meta:resourcekey="nota"></asp:Label></p>
    	<p><asp:Label id="notatrait" runat="server" Text="The following refers to two dialog boxes  : " meta:resourcekey="notatrait"></asp:Label></p>
    <ul>
    	<li><asp:Label id="li1_1" runat="server" meta:resourcekey="li1_1">"save as" in the image creation software, and </asp:Label></li>
    	<li><asp:Label id="li1_2" runat="server" meta:resourcekey="li1_2"> the dialog box shown by the NomImage program (illustration hereunder). </asp:Label></li>
    </ul>
    	<p><asp:Label id="Texte2_01" runat="server"
    	 Text="For more clarity, the instructions about the image creation software will be displayed &lt;span class='FondVert'&gt;on green background &lt;/span&gt;." meta:resourcekey="Texte2_01"></asp:Label></p>
    	<p><asp:Label id="Texte2_02" runat="server"
    	 Text="After loading the NomImage program, the first thing to do is to seize the name of the image series. &lt;span class='FondVert'&gt;After that, select the program where the images to save are, for example by clicking on its window or its icon (in Windows XP, the icons are in the taskbar).&lt;/span&gt;" meta:resourcekey="Texte2_02"></asp:Label></p>
    	<p><asp:Label id="Texte2_03" runat="server"
    	 Text="&lt;span class='FondVert'&gt;Launch the save command, as mentionned by the documentation of the image creation program. Once the 'save as' dialog box is opened, depress the F11 key. The selected zone (by default where you type the filename) is completed with the name&lt;/span&gt; as it appears in the NomImage dialog box, and simultaneously the counter is incremented of 1 for the next picture. The place where the name appears in the NomImage dialog box is squared in red on the illustration, for more clarity." meta:resourcekey="Texte2_03"></asp:Label></p>
    <!-- autre ������������ : --> <br />
    	<p><asp:Label id="Texte2_05" runat="server"
    	 Text="According to the checkboxes that are checked on the right (see the illustration), &lt;span class='FondVert'&gt;the Ctrl A keys can be sent before the file name (which has for results that the whole zone is selected before typing the name, so that the previous name is replaced), and the Enter key can be sent afterwards (which generally has for effect to validate the saving).&lt;/span&gt;" meta:resourcekey="Texte2_05"></asp:Label></p>
    	<p><asp:Label id="nota1" runat="server"
    	 Text="Nota : The F11 key reacts in a delay of half a second. This delay avoids to send several successive names in the 'save as' dialog box. One brief depression on the key is suffisant, and then half a second of patience." meta:resourcekey="nota1"></asp:Label></p>
    	<p><asp:Label id="Texte3_01" runat="server"
    	 Text="In case of mismatch, it is possible to correct the number of the current image. The + button, above the seizing zones in the NomImage dialog box, allows you to increase the number of 1. The - button underneath allows to decrease the number of 1. It is also possible to seize a value directly in the number zone. This value is taken in account when you leave the seizing zone." meta:resourcekey="Texte3_01"></asp:Label></p>
    	<p><asp:Label id="Texte3_03" runat="server"
    	 Text="Once all the images are saved, you can close the NomImage program, that stayed opened during the operations." meta:resourcekey="Texte3_03"></asp:Label></p>
    	<p><asp:Label id="nota2" runat="server"
    	 Text="Attention, this program runs by key simulations. You can obtain a different results according to the state of the keyboard (caps lock, num lock)." meta:resourcekey="nota2"></asp:Label></p>
    	<p><asp:Label id="Texte4_01" runat="server" Text="4-01" meta:resourcekey="Texte4_01"></asp:Label></p>
    	<table><tbody><tr>
    		<td><asp:Label id="td1" meta:resourcekey="td1" runat="server"><a href="http://www.zailes.org/Data/NomImage.exe">NomImage</a></asp:Label></td>
    		<td><asp:Label id="td2" meta:resourcekey="td2" runat="server">This program requires the VB execution kit. This is available on Microsoft's site, or installed with other programs of this site, which are proposed with an installation program.</asp:Label></td>
    </tr></tbody></table>
    	<p><asp:Label id="lienprinc" runat="server"
    	 Text="&lt;a href='../home.aspx&gt;Go to the main page&lt;/a&gt;" meta:resourcekey="lienprinc"></asp:Label></p>
    	<p><asp:Label id="valid" runat="server"
    	 Text="&lt;a href='http://validator.w3.org/check?uri=referer'&gt;&lt;img src='http://www.w3.org/Icons/valid-xhtml10' alt='Valid XHTML 1.0 Transitional' height='31' width='88' /&gt;&lt;/a&gt;" meta:resourcekey="valid"></asp:Label></p>
    	<p><asp:Label id="lblTitre" runat="server" Visible="false" Text="Name files with a numeration" meta:resourcekey="lblTitre"></asp:Label></p>
    </asp:Content>

    jeudi 18 juillet 2013 10:36
  •  J’ai essayé aussi le ZetaResourceEditor. Je n’ai pas de message d’erreur à l’utilisation, mais j’ai plusieurs messages d’erreur si j’essaye d’ouvrir la solution (aussi 2 projets qui n’existe pas).

    Quand même il y a plusieurs éditeurs de fichiers resx gratuits :

    http://www.windows8downloads.com/win8-simple-resx-editor-irjvgwcd/

    http://vermorel.com/journal/2006/3/9/a-translator-friendly-resx-file-editor.html

    En ce qui concerne l’interprétation de pseudoXML ce n’est pas une tâche facile.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    jeudi 18 juillet 2013 11:14
  • Ah, dommage ...
    Le ZetaResourceEditor, au moment d'ouvrir un projet rencontre une erreur de violation, tentative de lecture ou d'écriture de mémoire protégée, et ne peut pas aller plus loin.

    Je ne peux pas le déboguer, car Visual C# 2010 Express refuse de charger une partie des projets de la solution (à ce que je vois il y a une partie Windows et une partie Web, donc ce n'est pas très étonnant), et Visual Studio 2005 ne peut rien charger du tout.

    Il semble qu'il faille se garder de jeter trop vite le bébé avec l'eau du bain : en session administrateur ça se passe mieux. La délégation d'identité (exécuter "en tant que" admin) ne suffit pas. Dans le répertoire du programme je vois un Zetacaspol, et d'après ce que me rappelle la fin du nom j'imagine que le but est justement d'éviter cette contrainte.

    Alors je n'ai réussi à afficher qu'une langue à la fois, pour le Français j'ai mis du temps d'ailleurs, apparemment il faut encore chercher un peu.

    En résumé, l'usage n'est pas aussi immédiat que je me l'étais représenté, il faut quand même prendre le temps d'appréhender l'outil, mais ça a vraiment l'air de valoir le coup.

    jeudi 18 juillet 2013 11:45
  • 1 - la présence de la balise <%@ .... %> en début de document. Ceci n'est pas une construction XML légale. Seul le Parser ASP peut l'interpréter.

    2 - l'utilisation dans la valeur des attributs des caractères < et > utilisés tel quel, alors qu'ils auraient du être codés respectivement: &lt; et &gt;  Question quel est l'outil qui produit ces attributs ?  


    Il s'agit de Visual Studio pour le développement ASP.Net, et d'ailleurs personne n'a jamais prétendu qu'il s'agissait de fichiers XML. J'ai juste remarqué que les balises <asp:*> se fermaient à l'aide de balises </asp:*> à la manière de balises XML, et que du coup on pouvait concevoir de chercher à les exploiter sur ce modèle, mais bien sûr au prix d'une adaptation.

    Et là j'ai mis une page assez simple, mais comme je le disais avec un contrôle Repeater ce n'est pas triste :

                    <table style="border:0; width:100%; " cellpadding ="3" cellspacing="2"  >

    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1"
                            onitemdatabound="Repeater1_ItemDataBound"
                            onprerender="Repeater1_PreRender">
        <HeaderTemplate>
        <thead>
            <tr style="border-bottom:solid">
                <th rowspan="2" style="border-bottom:solid"></th>
                <th rowspan="2" style="border-bottom:solid; width:30px">Ligne catal.</th>
                <th rowspan="2" style="border-bottom:solid; text-align:left;">Référence</th>
                <th rowspan="2" style="border-bottom:solid; text-align:left;">Désignation</th>
                <th rowspan="2" colspan="2" style="border-bottom:solid; text-align:left;">Qté</th>
                <th colspan="2">Prix</th>
            </tr>
            <tr>
                <th style="border-bottom:solid">Unit.</th>
                <th style="border-bottom:solid">Total</th>
            </tr>
        </thead>
        </HeaderTemplate>
        <ItemTemplate>
                <tr>
                    <td>
                        <asp:Label ID="lblNumLigne" runat="server"><%# DataBinder.Eval(Container.DataItem, "Id") %></asp:Label>.
                   </td>
                    <td style="text-align:right">
                        <asp:Label ID="lblLigneProd" runat="server"><%# DataBinder.Eval(Container.DataItem, "Ligneprod") %></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="lblRefProduit" runat="server"><%# DataBinder.Eval(Container.DataItem, "refprod") %></asp:Label>
                    </td>
                    <td>
                        <asp:Label ID="lblIntituleProduit" runat="server"><%# DataBinder.Eval(Container.DataItem, "designation") %></asp:Label>
                    </td>
                    <td style="text-align:right;">
                        <asp:Label ID="lblQte" runat="server"><%# DataBinder.Eval(Container.DataItem, "qte") %></asp:Label>
                    </td>
                    <td>
                        <asp:Panel ID="PanelHautBas" runat="server" Height="29px"
                            style="Width:16px">
                            <table cellspacing="0" cellpadding="0">
                                <tr style=" vertical-align:top; margin-top:0; padding-top:0;"><td style=" vertical-align:top; margin-top:0; padding-top:0;">
                                    <asp:LinkButton ID="LinkButton1" runat="server" OnCommand="TraiteLigne" CommandName="Ajoute" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Ligneprod") %>'><asp:Image runat="server" ImageUrl="~/Images/fleche_haut.jpg" Width="8px" Height="10px" /></asp:LinkButton></td></tr>
                                <tr style=" vertical-align:top; margin-top:0; padding-top:0;"><td style=" vertical-align:top; margin-top:0; padding-top:0;">
                                    <asp:LinkButton ID="LinkButton2" runat="server" OnCommand="TraiteLigne" CommandName="Retire" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Ligneprod") %>'><asp:Image runat="server" ImageUrl="~/Images/fleche_bas.jpg" Width="8px" Height="10px" /></asp:LinkButton></td></tr>
                            </table>
                        </asp:Panel>
                    </td>
                    <td style="text-align:right">
                        <asp:Label ID="lblPrix" runat="server"><%# DataBinder.Eval(Container.DataItem, "prix") %></asp:Label>
                    </td>
                    <td style="text-align:right">
                        <asp:Label ID="lblTotalLigne" runat="server"><%# (Convert.ToDecimal(DataBinder.Eval(Container.DataItem, "prix").ToString()) * Convert.ToDecimal(DataBinder.Eval(Container.DataItem, "qte").ToString())) %></asp:Label>
                    </td>
                </tr>
        </ItemTemplate>
        <FooterTemplate>
                <tr><td colspan="8" style="border-top:solid; border-top-width:thin;"></td></tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td style="text-align:right; border:solid;">
                        <asp:Label ID="lblTotalGeneral" runat="server" Text="" Font-Bold="true"><%# prixGlobal.ToString("#,##0.00") %></asp:Label></td>
                </tr>
        </FooterTemplate>
    </asp:Repeater>
    </table>

    Pour parler franchement il aurait probablement été plus orthodoxe de mettre la balise <table> au début du HeaderTemplate du Repeater, et la balise </table> à la fin de son FooterTemplate.


    • Modifié Gloops jeudi 18 juillet 2013 12:13 syntaxe
    jeudi 18 juillet 2013 11:56
  •  J’ai essayé aussi le ZetaResourceEditor. Je n’ai pas de message d’erreur à l’utilisation, mais j’ai plusieurs messages d’erreur si j’essaye d’ouvrir la solution (aussi 2 projets qui n’existe pas).

    Quand même il y a plusieurs éditeurs de fichiers resx gratuits :

    http://www.windows8downloads.com/win8-simple-resx-editor-irjvgwcd/

    http://vermorel.com/journal/2006/3/9/a-translator-friendly-resx-file-editor.html

    En ce qui concerne l’interprétation de pseudoXML ce n’est pas une tâche facile.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    C'est vrai que quand j'ai vu "Ouvrir un projet", je me suis dit ah chouette je vais avoir tous les fichiers ressource du site web d'un coup, en fait non c'est un projet ZetaEditor, donc il faut le créer et ensuite y insérer les ressources à éditer.

    Ah oui les autres peuvent mériter un coup d'œil aussi, en espérant ne pas mettre trop de temps à arrêter un choix.

    En tout cas j'ai des chances d'avoir fini de ramer à agrandir la zone d'édition ligne par ligne jusqu'à la rendre exploitable.

    jeudi 18 juillet 2013 12:01
  • Plutôt que lire un flux et s'arrêter en rencontrant une chaîne-clé, je me demande si le bon outil pour extraire des balises dont le nom commence par <asp: ne serait pas les expressions régulières. Je m'en suis un peu servi une fois, mais pas assez pour bien me rendre compte ...

    D'ailleurs, en gardant le Zeta Editor pour modifier les fichiers ressources une fois qu'ils existent, il n'est pas exclu que ça soit intéressant de les créer sur la base d'un script qui reconnaît les balises asp, et en extrait les propriétés meta:resourcekey.

    Sauf si quelqu'un s'écrie que je viens de dire une grosse bêtise, je sens que je vais un peu chercher par là.

    jeudi 18 juillet 2013 12:59
  • Quelque chose de pratique avec les expressions régulières, c'est qu'on peut les mettre au point sous Javascript, avant de les utiliser au besoin sous C#, parce qu'il faut quand même reconnaître que la mise à jour de fichiers de ressources sous Javascript ça risque d'être pêchu.
    Donc, il semble bien effectivement que je me sois orienté vers une réponse à la question du début du fil, et que ça marche pas trop mal.

    A présent j'ai donc le chemin d'une source de page aspx, donc des fichiers de ressources qui doivent aller avec, la détection de leur présence ou non, et la liste des ressources à générer dedans. Dans la mesure où j'ai tout le "OuterXml" (si on peut dire) du contrôle aspx concerné, ça ne va pas être bien long d'extraire le contenu et la propriété texte (le formulaire donnera le choix entre les deux pour le cas où les deux seraient renseignés).

    Ensuite, ça rime à quelque chose seulement en fignolant les mises à jour partielles au niveau création de ressources individuelles, parce que si je me souviens bien la plateforme est en mesure de générer des ressources avec le texte fourni dans la page de départ, sauf que si on fait ça alors qu'un fichier ressources existait, toutes les modifications qui auraient été effectuées dedans sont effacées. A fortiori pour les copies effectuées du fichier de ressources d'origine pour les traductions. Ce qui sera intéressant sera donc d'ajouter deux ou trois nouvelles ressources existant dans la page (voire même une seule), en préservant toute la traduction déjà effectuée.

    Alors après il y a la partie saisie, ça c'est une partie qu'il n'y a pas à faire puisque donc il y a des outils superbes pour ça.


    • Modifié Gloops samedi 20 juillet 2013 20:08 accord syntaxique
    samedi 20 juillet 2013 20:07