2011-02-15 5 views
0

Excuses si ce n'est pas bien écrit mais c'est ma première exposition à XSLT.XSL Transformation - Exclure certains enfants

Voici un exemple de structure xml.

<ProcessedOrder> 
    <ProcessDetail> 
    <Detail1>Some Sample Data</Detail1> 
    </ProcessDetail> 
    <Management> 
    <Employee Id="EM156896"> 
     <Name>James Davies</Name> 
    </Employee> 
    </Management> 
    <Order Id="IR1245486"> 
    <Details> 
     <Date>01-02-2011</Date> 
     <Name>XSLT : The Complete Beginners Guide</Name> 
     <Description>The Complete Beginners Guide to XSL Transformations</Description> 
    </Details> 
    <Delivery> 
     <Customer Id="CN005687"> 
     <Name>John Henry</Name> 
    <ContactInformation> 
     <AddressLine1>55 John Street</AddressLine1> 
     <Country _Id="GBR">United Kingdom</Country> 
     <Phone>1234-123456</Phone> 
     <Fax>1234-5544-2250</Fax> 
     <EmailAddress>[email protected]</EmailAddress> 
     <City>London</City> 
     <PostalCode>AW7T 3XS</PostalCode> 
     </ContactInformation> 
     </Customer> 
    </Delivery> 
    </Order> 
    <Billing> 
    <Customer Id="CN005858"> 
     <Name>Thomas Henry</Name> 
     <ContactInformation> 
     <AddressLine1>66 Thomas Street</AddressLine1> 
     <Country _Id="GBR">United Kingdom</Country> 
     <Phone>1234-545464</Phone> 
     <Fax>2233-8989-1234</Fax> 
     <EmailAddress>[email protected]</EmailAddress> 
     <City>Bristol</City> 
     <PostalCode>BS4Y 2WT</PostalCode> 
     </ContactInformation> 
    </Customer> 
    </Billing> 
</ProcessedOrder> 

// Production Désirée

<Order Id="IR1245486"> 
    <Details> 
    <Date>01-02-2011</Date> 
    <Name>XSLT : The Complete Beginners Guide</Name> 
    <Description>The Complete Beginners Guide to XSL Transformations</Description>  
    </Details> 
    <Delivery> 
    <Customer Id="CN005858"> 
     <Name>Thomas Henry</Name> 
     <ContactInformation> 
     <AddressLine1>66 Thomas Street</AddressLine1> 
     <Country _Id="GBR">United Kingdom</Country> 
     <Phone>1234-545464</Phone> 
     <Fax>2233-8989-1234</Fax> 
     <EmailAddress>[email protected]</EmailAddress> 
     <City>Bristol</City> 
     <PostalCode>BS4Y 2WT</PostalCode> 
     </ContactInformation> 
    </Customer> 
    </Delivery> 
</Order> 

Je suis en train de faire un certain nombre de choses au cours d'une transformation.

  1. Extrait du <Order> du XML
  2. Exclure les <Customer> du <Delivery>
  3. Insérez le <Customer> du <Billing> où le <Delivery><Customer> était.

Je suppose que je peux extraire l'Ordre en utilisant les éléments suivants ..

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="/"> 
    <xsl:apply-templates select="//Order"/> 
    </xsl:template> 

    <xsl:template match="Order"> 
    <xsl:copy-of select="."/>  
    </xsl:template> 
</xsl:stylesheet> 

Une fois que je commence à essayer d'exclure le Client je suis complètement perdu ..

Toute aide serait très appréciée.

Merci beaucoup,

M.

Répondre

0

Voici une feuille de style exemple qui devrait faire le travail et permettre une personnalisation plus poussée en ajoutant des modèles:

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/"> 
    <xsl:apply-templates select="ProcessedOrder/Order"/> 
    </xsl:template> 

    <xsl:template match="Order/Delivery/Customer"> 
    <xsl:apply-templates select="/ProcessedOrder/Billing/Customer"/> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Martin, Merci un million pour revenir à moi à ce sujet. Je vais parcourir votre solution proposée. À première vue, cela semble plus logique qu'une partie de la solution que j'ai essayé de mettre en œuvre moi-même. – user617850

+0

C'est excellent cela fonctionne parfaitement ... Est-il possible de vérifier si la Commande/Livraison/Client existe ou si le ProcessedOrder/Facturation/Client existe? – user617850

+0

De telles vérifications sont facilement effectuées avec, par ex. ' ..' mais je ne suis pas sûr de l'endroit où vous voulez mettre cette vérification. Vous devez expliquer plus en détail ce que vous voulez réaliser en plus du problème original. –

Questions connexes