2010-12-06 20 views
1

J'ai un fichier xml que j'ai lié à un schéma xsd. Je veux créer un xsl pour le schéma de telle sorte que quel que soit l'ordre j'écrire le code XML en elle vient imprimé dans cet ordre par exemple:xsd & xml avec changement d'ordre d'élément

'<employee> 
<firstname>sultan</firstname> 
<lastname>saadat</lastname> 
</employee>' 

Si le bloc ci-dessus est écrit comme ceci:

<employee> 
    <lastname>saadat</lastname> 
    <firstname>sultan</firstname> 
    </employee> 

Il devrait sortir de la même manière lorsqu'il est transformé et pas dans le sens où il est analysé? quelles pourraient être les solutions possibles?

ayant des problèmes avec ce fichier xml

<?xml version="1.0" encoding="UTF-8"?> 
<resume> 



    <professional-experience-section> 
    <section-name>PROFESSIONAL EXPERIENCE</section-name> 
    <enabled>true</enabled> 
    <company> 
     <name>Computer Sciences Corporation</name> 
     <city>New York</city> 
     <state>NY</state> 
     <country>United States</country> 
     <job-title> 
     <title>Senior Software Engineer</title> 
     <start-date>Aug 1996</start-date> 
     <end-date>May 2010</end-date> 
     <ongoing>false</ongoing> 
     <job-description> 
      <bullet-point> 
      <statement>C#, Visual Basic, Asp.net</statement> 
      </bullet-point> 
      <bullet-point> 
      <statement>Inspect completed work to ensure conformance to specifications, standards, and contract requirements.</statement> 
      </bullet-point> 
      <bullet-point> 
      <statement>Another Work Description.</statement> 
      </bullet-point> 
     </job-description> 
     </job-title> 
    </company> 
    <company> 
     <name>Acme</name> 
     <city>Silver Spring</city> 
     <state>MD</state> 
     <country>United States</country> 


     </company> 
    </professional-experience-section> 


    <education-section> 
    <section-name>EDUCATION</section-name> 
    <enabled>true</enabled> 
    <institution> 
     <name>Allston Community College</name> 
     <city>Akron</city> 
     <state>MA</state> 
     <country>United States</country> 
     <degree>Bachelor of Art in Marketing Candidate</degree> 
     <end-date>Jan 2020</end-date> 
     <ongoing>true</ongoing> 
     <expected-completion-date>Jan 2020</expected-completion-date> 
     <completed></completed> 
     <bullet-point> 
     <statement>detail of what i did at the allston community college</statement> 
     </bullet-point> 
    </institution> 



    </education-section> 

    <additional-skills-section> 
    <section-name>ADDITIONAL SKILLS</section-name> 
    <enabled>true</enabled> 
    <layout>1 Column</layout> 
    <bullet-point> 
     <statement>1</statement> 
    </bullet-point> 


    </additional-skills-section> 
    <custom-section> 
    <section-name>PUBLICATIONS</section-name> 
    <layout>2</layout> 
    <bullet-point> 
     <statement>test</statement> 
    </bullet-point> 
    </custom-section> 

    <custom-section> 
    <section-name>AWARDS</section-name> 
    <layout>2</layout> 
    <bullet-point> 
     <statement>test</statement> 
    </bullet-point> 
    </custom-section> 

</resume> 

Exemple de feuille de style pour une section, en va de même pour d'autres sections:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/resume"> 
    <xsl:value-of select="/resume/contact-information/full-name"/> 
    <xsl:value-of select="/resume/contact-information/address_line_1"/> 
    <xsl:value-of select="/resume/contact-information/address_line_2"/> 
    <xsl:value-of select="/resume/contact-information/city"/> 
    <xsl:value-of select="/resume/contact-information/state"/> 
    <xsl:value-of select="/resume/contact-information/country"/> 
    <xsl:value-of select="/resume/contact-information/phone"/> 

    <xsl:for-each select="/resume/professional-experience-section/company"> 
     <!--for company name--> 
     <xsl:value-of select="name"/> 
     <xsl:value-of select="city"/>, <xsl:value-of select="state"/> 
     <xsl:value-of select="country"/> 
     <!--loop into job title--> 
     <xsl:for-each select="job-title"> 
      <!--for job title--> 
      <xsl:value-of select="title"/> 
      <!--for job start date and job end date--> 
      <xsl:value-of select="start-date"/> – <xsl:value-of 
       select="end-date"/> 
      <!--Loop into job description--> 
      <xsl:for-each select="job-description"> 
       <!--loop into each bullet point--> 
       <xsl:for-each select="bullet-point"> 
        <xsl:value-of select="statement"/> 
       </xsl:for-each> 
      </xsl:for-each> 
     </xsl:for-each> 
    </xsl:for-each> 
+0

En quoi exactement avez-vous un problème avec: la création d'un schéma qui permet de commander ou de créer une transformation XSLT qui respecte cet ordre? Ce sont deux choses différentes. –

+0

J'ai le schéma que je cherche un xsl qui compte pour l'ordre flexible de xml, de sorte que si je change le xml, le xsl change la sortie elle-même. –

+0

Ceci est la même que votre ancienne question http://stackoverflow.com/questions/4214966/xml-sorting-using-xsl: Application de templeates avec un ordre de tri. –

Répondre

1

Il y a plusieurs façons, mais ils ont tendance à se réduire à une boucle à travers les étiquettes qui sont "soit le nom de famille ou le prénom" dans l'ordre. Un exemple serait

<xsl:for-each select="firstname|lastname"> 
    <xsl:value-of select="."> 
</xsl:for-each> 
+0

ok ceci l'opérateur ou que vous utilisez ici? –

+0

et il peut s'adapter à un certain nombre d'éléments? –

+0

@Sultan: En fait, il est appelé l'opérateur de l'union: http://www.w3.org/TR/xpath/#node-sets –