2012-09-18 6 views
1

Je suis très nouveau sur xslt et j'essaie d'apprendre. L'objectif de transformer mes données xml et lier le fichier XML de sortie à la forme adobe.XSLT - utiliser des valeurs codées en dur et les boucler

J'ai un xml de la structure suivante.

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<envelope xmlns="http://www.mydata.de/xem/reporting/datafile"> 
<sources> 
    <source> 
     <data> 
      <REPORT> 
       <EM_ESOURCE> 
        <EM_ES_MEASURE> 
         <ID>1037343</ID> 
         <ES_ID>1006222</ES_ID> 
         <ES_NAME>MFC-D-002</ES_NAME> 
         <EM_MAT_NAME>Cyprinella leedsi</EM_MAT_NAME> 
         <START_DATE>1/19/98</START_DATE> 
         <LABORATORY>Thornton</LABORATORY> 
         <LC50>&gt;100%</LC50> 
         <TESTTYPE/> 
         <IC25/> 
        </EM_ES_MEASURE> 
        <EM_ES_MEASURE> 
         <ID>1037344</ID> 
         <ES_ID>1006222</ES_ID> 
         <ES_NAME>MFC-D-002</ES_NAME> 
         <EM_MAT_NAME>C Dubia</EM_MAT_NAME> 
         <START_DATE>3/2/98</START_DATE> 
         <LABORATORY>Thornton</LABORATORY> 
         <LC50>&gt;120%</LC50> 
         <TESTTYPE>Routine</TESTTYPE> 
         <IC25/> 
        </EM_ES_MEASURE> 
       </EM_ESOURCE> 
      </REPORT> 
     </data> 
    </source> 
</sources> 

Ceci est le résultat de l'une des requêtes. Le rapport Adobe exige que les documents soient toujours affichés dans un ordre particulier, quel que soit le résultat de la requête. J'ai donc décidé de coder en dur l'ordre des matériaux dans le xsl, de boucler sur cette liste puis d'extraire les valeurs "LC50" correspondantes du fichier xml de données.

ci-après le xsl que j'ai commencé:

<?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:rep="http://www.technidata.de/xem/reporting/datafile" 
xmlns:s="http:/materials.data" 
xmlns:java="http://xml.apache.org/xslt/java"> 
<xsl:output method="html" omit-xml-declaration="yes" encoding="UTF-8"/>  
<!-- Suppress copy of restrictions --> 
<!--xsl:template match="text()|@*"/--> 
<xsl:key name="material-lookup" match="s:material" use="s:name"/> 
<xsl:template match="/"> 
<REPORT> 
     <HEADERS> 
      <STARTDATE><xsl:value-of select="substring(/rep:envelope/rep:sources/rep:restrictions/rep:START_DATE,1,10)"/></STARTDATE> 
      <ENDDATE><xsl:value-of select="substring(/rep:envelope/rep:sources/rep:restrictions/rep:START_DATE,16,24)"/></ENDDATE> 
      <FACILITY><xsl:value-of select="normalize-space(/rep:envelope/rep:sources/rep:restrictions/rep:ID_ATTRIBUTE_ID_NAME)"/></FACILITY> 
     </HEADERS> 
     <MATERIALS>   
     </MATERIALS> 
     </REPORT></xsl:template> 
    <s:materials> 
<s:material> 
    <s:name>Cyprinella leedsi</s:name> 
    <s:parameter>LC(ROUTINE) </s:parameter> 
</s:material> 
<s:material> 
    <s:name>C Dubia</s:name> 
    <s:parameter>LC50(ROUTINE) </s:parameter> 
</s:material> 
</s:materials> 
</xsl:stylesheet> 

Je ne suis pas sûr de savoir comment remplir le le nœud matériaux avec les matériaux dans l'ordre défini dans le xslt et leurs valeurs de CL50 correspondantes à partir des données xml.

+0

Pouvez-vous donner un exemple de ce à quoi devrait ressembler la sortie XML pour votre XML d'entrée ci-dessus? – StuartLC

Répondre

0

Utilisez la fonction document('') pour XPath dans le fichier XSLT lui-même.

Questions connexes