0
votes

Comment ré-commander un fichier XML avec XSLT tout en conservant la structure

Je sais que c'est un problème fondamental, mais je suis très nouveau à XSL et je ne le fais pas pour travailler. J'ai un fichier XML avec une structure donnée et je souhaite réorganiser le XML dans l'ordre alphabétique en fonction d'un nœud tout en conservant la structure. J'ai besoin de cette feuille de style xslt pour réorganiser un XML lors de l'importation dans Adobe InDesign.

Mon fichier: P>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
  <Root>
  <Employee>
      <xsl:for-each select="Root/Employee">
      <xsl:sort select="Last_Name"/>
        <First_Name><xsl:value-of select="First_Name"/></First_Name>
        <Last_Name><xsl:value-of select="Last_Name"/></Last_Name>
        <Salary><xsl:value-of select="Salary"/></Salary>
        <Performance><xsl:value-of select="Performance"/></Performance>
      </xsl:for-each>
  </Employee>
  </Root>
</xsl:template>

</xsl:stylesheet>


5 commentaires

Lorsque vous traitez les éléments Employee , vous souhaitez utiliser xsl: trier select = "Nom" . Que vous utilisiez simplement xsl: apply-templats ou xsl: pour chacun ou xsl: exécutez-la sorte . Alors, donnez-lui un essai et dites-nous et montrez-nous où vous êtes coincé, il n'a pas vraiment de problème si le résultat est un XML ou de certains HTML.


À moins que vous ne vous montriez votre meilleure tentative, nous ne pouvons pas voir où vous rencontrez des difficultés. Nous pouvons écrire le code pour vous, mais cela ne vous enseigne rien. Lorsque vous dites "J'ai trouvé des solutions ... qui produisent HTML" Cela suggère que vous essayez de trouver des exemples de code qui font exactement ce que vous voulez, plutôt que d'essayer d'apprendre les concepts de base que vous pouvez combiner pour créer des solutions à des problèmes arbitraires . Vous devez probablement faire plus de lecture.


@Michaelkay tu as tellement raison. Je dois faire plus de lecture. Avez-vous une bonne ressource où vous pouvez me guider?


Le style d'apprentissage de chacun diffère. Si je dois apprendre une nouvelle langue, je commence toujours par me procurer un livre et une écoulement de la lecture de la couverture pour découvrir ce qui est là. Il y a beaucoup de bons livres sur XSLT - y compris le mien.


Merci @Michaelkay pour le conseil.


3 Réponses :


1
votes

Vous étiez vraiment em> près de la solution:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
  <Root>
      <xsl:for-each select="Root/Employee">

      <xsl:sort select="Last_Name"/>
      <Employee>
        <First_Name><xsl:value-of select="First_Name"/></First_Name>
        <Last_Name><xsl:value-of select="Last_Name"/></Last_Name>
        <Salary><xsl:value-of select="Salary"/></Salary>
        <Performance><xsl:value-of select="Performance"/></Performance>
       </Employee>
      </xsl:for-each>
  </Root>
</xsl:template>

</xsl:stylesheet>


1 commentaires

Oh, homme. Il suffit de déplacer que à l'intérieur du pour-chacun résout le problème ...



1
votes

Si vous transformez XML sur XML lorsque vous souhaitez conserver une partie ou même la majeure partie du contenu, je suggérerais de commencer par le modèle de transformation d'identité, puis ajoutez les modèles nécessaires pour effectuer le changement que vous souhaitez faire, par exemple. Dans votre cas pour trier: xxx

https: //xsltfiddle.liberty -Development.net/6rexjig


0 commentaires

3
votes

ou simplement: xxx


0 commentaires