2017-01-11 2 views
1

Je dispose d'un ensemble de données XML produit par BI Publisher qui contient deux groupeschanger Dynamiquement têtes dans BI Publisher Modèle

XML Entrée:

<DS> 
    <G_1> 
     <TASK_NAME>IMPORTANT TASK</TASK_NAME> 
     <PROJECT_DESCRIPTION>ACTIVATION</PROJECT_DESCRIPTION> 
     <CS_SUM_TASK_COST>100.03</CS_SUM_TASK_COST> 
     <CS_SUM_TASK_FUNDING>2000</CS_SUM_TASK_FUNDING> 
    </G_1> 

    <G_1> 
     <TASK_NAME>IMPORTANT TASK</TASK_NAME> 
     <PROJECT_DESCRIPTION>DEACTIVATION</PROJECT_DESCRIPTION> 
     <CS_SUM_TASK_COST>50.00</CS_SUM_TASK_COST> 
     <CS_SUM_TASK_FUNDING>5000</CS_SUM_TASK_FUNDING> 
    </G_1> 
    . 
    . 

    <G_2> 
     <INVOICE_NUMBER>7000006861</INVOICE_NUMBER> 
     <INVOICE_DATE>2004-03-26T07:23:49.000-05:00</INVOICE_DATE> 
     <INV_AMOUNT>5.01</INV_AMOUNT> 
    </G_2> 
    <G_2> 
     <INVOICE_NUMBER>7000006862</INVOICE_NUMBER> 
     <INVOICE_DATE>2004-03-26T07:23:49.000-05:00</INVOICE_DATE> 
     <INV_AMOUNT>10.01</INV_AMOUNT> 
    </G_2> 
    . 
    . 
</DS> 

Comment sélectionner un en-tête pour la FACTURE nœuds?

J'ai essayé dans mon document RTF l'approche suivante

<?choose:?> 
<?when://G_2[contains(local-name(), 'INVOICE')]?> 
HEADER 1 
<?end when?> 

<?otherwise?> 
HEADER 2 
<?end otherwise?> 
<?end choose?> 

<?body:begin?> 
for each processing of G_1 nodes 

<<I Want to start using the second header here>> 

for each processing of G_2 nodes 
<?body end?> 

L'en-tête ne change jamais.

S'il vous plaît, aidez-moi.

+0

J'ai oublié de mentionner que j'ai besoin de certaines valeurs de l'ensemble de données pour apparaître dans l'en-tête. Dans cette approche, @section réinitialise toutes les valeurs afin qu'elles soient vides dans l'en-tête. Cela fonctionne si je veux seulement que le texte statique apparaisse dans l'en-tête. – JBOYD

Répondre

1

Pour contrôler l'en-tête, utilisez la commande @section et une variable globale. Essaye ça.

Mettez ce code dans le corps.

<[email protected]:G_1?> 
<?xdoxslt:set_variable($_XDOCTX, 'HEADER', 'INVOICE')?> 
<?end for-each?> 
<[email protected]:G_2?> 
<?xdoxslt:set_variable($_XDOCTX, 'HEADER', 'OTHER')?> 
<?end for-each?> 

Maintenant, mettez ceci dans l'en-tête: <?xdoxslt:get_variable($_XDOCTX, 'HEADER')?>

PIF divise l'ensemble de données avec @section d'abord, et imprime la variable « HEADER » pour toutes les pages, jusqu'à la prochaine scission est atteinte.

+0

Cela produit un document vide – JBOYD

0

Cette approche fonctionne pour la question posée.

Mais j'ai oublié de mentionner que j'ai besoin d'inclure des valeurs de l'ensemble de données dans l'en-tête et pas seulement du texte statique. L'utilisation de @section empêche cela car toutes les valeurs extérieures à for-each sont réinitialisées et sont donc vides dans l'en-tête.

Je marque cela comme résolu pour la question posée à l'origine.