2011-07-30 1 views
3

J'ai des fichiers XML qui contiennent des jeux d'enregistrements où une certaine quantité est parfois égale à 0. Maintenant, ces dossiers dont je dois me débarrasser. J'ai fait ce qui suit. Cela fonctionne essentiellement: il copie tout sauf les produits avec productQuantityinttrue = 0. Mais parfois, il y a des recordsets qui ne devraient pas l'être. Maintenant, ma question est de savoir s'il serait préférable de travailler avec une négociation commeEst-ce que la négation est préférable dans les conditions?

<xsl:template match="/ExportData/DataSet/Tables/Table/Rows/R[not(productQuantityinttrue='0')]" 

Et puis bien sûr je devrais copier ceux pour lesquels cette dernière affirmation est vraie. Est-ce que quelqu'un a déjà fait des expériences avec ça? Je n'ai pas publié le XML car il s'agit essentiellement de "nier ou ne pas nier".

Merci pour vos idées et meilleures salutations, Peter

<?xml version="1.0" encoding="UTF-8"?> 
<ExportData> 
    <TransportHeader> 
    <Timestamp>2011-07-28 14:16:49</Timestamp> 
    <From> 
     <Name>MFES DynamicExport Plugin</Name> 
     <Version>1.1.6.95</Version> 
    </From> 
    <MessageId>a46d4d6d-667e-4e74-b3c5-a6e9ecaeacb1</MessageId> 
    </TransportHeader> 
    <ExportConfig> 
    <DateTimeFormat>yyyy-MM-dd HH:mm:ss</DateTimeFormat> 
    <DecimalSymbol>.</DecimalSymbol> 
    </ExportConfig> 
    <DataSet>LSA_SALES_EXPORT <Tables> 
    <Table>MI_Sales <RH> 
     <C>companyCodestringtrue</C> 
     <C>storeNumstring</C> 
     <C>transactionDatedateTime</C> 
     <C>transactionQualifierIDint</C> 
     <C>transactionQualifierstring</C> 
     <C>costCenterNumberstringtrue</C> 
     <C>revenueCenterPOSReflongtrue</C> 
     <C>menuItemNumberlong</C> 
     <C>menuItemNameOnestring</C> 
     <C>menuItemNameTwostringtrue</C> 
     <C>crossReferenceOnestringtrue</C> 
     <C>crossReferenceTwostringtrue</C> 
     <C>consumerUnitDescriptionstringtrue</C> 
     <C>transactionValueInclVATdecimaltrue</C> 
     <C>transactionValueExclVATdecimaltrue</C> 
     <C>productQuantityinttrue</C> 
     <C>productValueInclVATdecimaltrue</C> 
     <C>productValueExclVATdecimaltrue</C> 
     <C>discountType01AmountInclVATdecimaltrue</C> 
     <C>discountType02AmountInclVATdecimaltrue</C> 
     <C>discountType03AmountInclVATdecimaltrue</C> 
     <C>discountType04AmountInclVATdecimaltrue</C> 
     <C>discountType05AmountInclVATdecimaltrue</C> 
     <C>discountType06AmountInclVATdecimaltrue</C> 
     <C>discountType07AmountInclVATdecimaltrue</C> 
     <C>discountType08AmountInclVATdecimaltrue</C> 
     <C>discountType09AmountInclVATdecimaltrue</C> 
     <C>discountType10AmountInclVATdecimaltrue</C> 
     <C>discountType01AmountExclVATdecimaltrue</C> 
     <C>discountType02AmountExclVATdecimaltrue</C> 
     <C>discountType03AmountExclVATdecimaltrue</C> 
     <C>discountType04AmountExclVATdecimaltrue</C> 
     <C>discountType05AmountExclVATdecimaltrue</C> 
     <C>discountType06AmountExclVATdecimaltrue</C> 
     <C>discountType07AmountExclVATdecimaltrue</C> 
     <C>discountType08AmountExclVATdecimaltrue</C> 
     <C>discountType09AmountExclVATdecimaltrue</C> 
     <C>discountType10AmountExclVATdecimaltrue</C> 
     <C>totalAmountDiscountInclVATdecimaltrue</C> 
     <C>totalAmountDiscountExclVATdecimaltrue</C> 
     <C>totalAmountVATdecimaltrue</C> 
     <C>rateAmountVATdecimaltrue</C> 
     <C>returnReasonCodestringtrue</C> 
     <C>weightdecimaltrue</C> 
     <C>detailTypeinttrue</C> 
     <C>detailPOSReflong</C> 
     <C>menuItemIDlong</C> 
    </RH> 
    <Rows> 
     <R> 
     <companyCodestringtrue>111</companyCodestringtrue> 
     <storeNumstring>6002</storeNumstring> 
     <transactionDatedateTime>2011-07-27 00:00:00</transactionDatedateTime> 
     <transactionQualifierIDint>1</transactionQualifierIDint> 
     <transactionQualifierstring>Sales</transactionQualifierstring> 
     <costCenterNumberstringtrue/> 
     <revenueCenterPOSReflongtrue>1000</revenueCenterPOSReflongtrue> 
     <menuItemNumberlong>5900003</menuItemNumberlong> 
     <menuItemNameOnestring>Exc X Crmy 100g.LSCA</menuItemNameOnestring> 
     <menuItemNameTwostringtrue>Exc X Crmy 1.LSCA</menuItemNameTwostringtrue> 
     <crossReferenceOnestringtrue>1110</crossReferenceOnestringtrue> 
     <crossReferenceTwostringtrue>037466017594</crossReferenceTwostringtrue> 
     <consumerUnitDescriptionstringtrue/> 
     <transactionValueInclVATdecimaltrue>3.69</transactionValueInclVATdecimaltrue> 
     <transactionValueExclVATdecimaltrue>3.69</transactionValueExclVATdecimaltrue> 
     <productQuantityinttrue>1</productQuantityinttrue> 
     <productValueInclVATdecimaltrue>3.69</productValueInclVATdecimaltrue> 
     <productValueExclVATdecimaltrue>3.265487</productValueExclVATdecimaltrue> 
     <discountType01AmountInclVATdecimaltrue/> 
     <discountType02AmountInclVATdecimaltrue/> 
     <discountType03AmountInclVATdecimaltrue/> 
     <discountType04AmountInclVATdecimaltrue/> 
     <discountType05AmountInclVATdecimaltrue/> 
     <discountType06AmountInclVATdecimaltrue/> 
     <discountType07AmountInclVATdecimaltrue/> 
     <discountType08AmountInclVATdecimaltrue/> 
     <discountType09AmountInclVATdecimaltrue/> 
     <discountType10AmountInclVATdecimaltrue/> 
     <discountType01AmountExclVATdecimaltrue/> 
     <discountType02AmountExclVATdecimaltrue/> 
     <discountType03AmountExclVATdecimaltrue/> 
     <discountType04AmountExclVATdecimaltrue/> 
     <discountType05AmountExclVATdecimaltrue/> 
     <discountType06AmountExclVATdecimaltrue/> 
     <discountType07AmountExclVATdecimaltrue/> 
     <discountType08AmountExclVATdecimaltrue/> 
     <discountType09AmountExclVATdecimaltrue/> 
     <discountType10AmountExclVATdecimaltrue/> 
     <totalAmountDiscountInclVATdecimaltrue/> 
     <totalAmountDiscountExclVATdecimaltrue/> 
     <totalAmountVATdecimaltrue>0</totalAmountVATdecimaltrue> 
     <rateAmountVATdecimaltrue>13</rateAmountVATdecimaltrue> 
     <returnReasonCodestringtrue/> 
     <weightdecimaltrue>0</weightdecimaltrue> 
     <detailTypeinttrue>1</detailTypeinttrue> 
     <detailPOSReflong>5900003</detailPOSReflong> 
     <menuItemIDlong>136577483</menuItemIDlong> 
     </R> 
     <R> 
     <companyCodestringtrue>111</companyCodestringtrue> 
     <storeNumstring>6002</storeNumstring> 
     <transactionDatedateTime>2011-07-27 00:00:00</transactionDatedateTime> 
     <transactionQualifierIDint>1</transactionQualifierIDint> 
     <transactionQualifierstring>Sales</transactionQualifierstring> 
     <costCenterNumberstringtrue/> 
     <revenueCenterPOSReflongtrue>1000</revenueCenterPOSReflongtrue> 
     <menuItemNumberlong>5900185</menuItemNumberlong> 
     <menuItemNameOnestring>PD MousseHzl140g.LSCA</menuItemNameOnestring> 
     <menuItemNameTwostringtrue>PD MousseHzl.LSCA</menuItemNameTwostringtrue> 
     <crossReferenceOnestringtrue>428131</crossReferenceOnestringtrue> 
     <crossReferenceTwostringtrue>037466083414</crossReferenceTwostringtrue> 
     <consumerUnitDescriptionstringtrue/> 
     <transactionValueInclVATdecimaltrue>0</transactionValueInclVATdecimaltrue> 
     <transactionValueExclVATdecimaltrue>0</transactionValueExclVATdecimaltrue> 
     <productQuantityinttrue>0</productQuantityinttrue> 
     <productValueInclVATdecimaltrue>4.99</productValueInclVATdecimaltrue> 
     <productValueExclVATdecimaltrue>4.415929</productValueExclVATdecimaltrue> 
     <discountType01AmountInclVATdecimaltrue/> 
     <discountType02AmountInclVATdecimaltrue/> 
     <discountType03AmountInclVATdecimaltrue/> 
     <discountType04AmountInclVATdecimaltrue/> 
     <discountType05AmountInclVATdecimaltrue/> 
     <discountType06AmountInclVATdecimaltrue/> 
     <discountType07AmountInclVATdecimaltrue/> 
     <discountType08AmountInclVATdecimaltrue/> 
     <discountType09AmountInclVATdecimaltrue/> 
     <discountType10AmountInclVATdecimaltrue/> 
     <discountType01AmountExclVATdecimaltrue/> 
     <discountType02AmountExclVATdecimaltrue/> 
     <discountType03AmountExclVATdecimaltrue/> 
     <discountType04AmountExclVATdecimaltrue/> 
     <discountType05AmountExclVATdecimaltrue/> 
     <discountType06AmountExclVATdecimaltrue/> 
     <discountType07AmountExclVATdecimaltrue/> 
     <discountType08AmountExclVATdecimaltrue/> 
     <discountType09AmountExclVATdecimaltrue/> 
     <discountType10AmountExclVATdecimaltrue/> 
     <totalAmountDiscountInclVATdecimaltrue/> 
     <totalAmountDiscountExclVATdecimaltrue/> 
     <totalAmountVATdecimaltrue>0</totalAmountVATdecimaltrue> 
     <rateAmountVATdecimaltrue>13</rateAmountVATdecimaltrue> 
     <returnReasonCodestringtrue/> 
     <weightdecimaltrue>0</weightdecimaltrue> 
     <detailTypeinttrue>1</detailTypeinttrue> 
     <detailPOSReflong>5900185</detailPOSReflong> 
     <menuItemIDlong>136577665</menuItemIDlong> 
     </R> 
    </Rows> 
    </Table> 
</Tables> 

+0

Bonne question, +1. Voir ma réponse pour une * estimation * de ce qui cause le problème (toujours fournir des données pour reproduire un problème!) Et une solution pour cela. –

Répondre

3
<!-- delete 0-quantity records --> 

<xsl:template match="/ExportData/DataSet/Tables/Table/Rows/R[productQuantityinttrue='0']"/> 

Il ne fondamentalement fonctionne: il copie tout sauf ceux avec productQuantityinttrue = 0. Mais parfois, il y a des jeux d'enregistrements supprimés qui ne devrait pas l'être.

Vous n'avez pas fourni un exemple pour repro ce problème.

Je pense que vous pouvez résoudre ce problème en utilisant:

<xsl:template match= 
    "Rows/R[not(productQuantityinttrue[2]) 
     and 
      productQuantityinttrue='0' 
      ]"/> 

L'expression dans l'attribut match sélectionne que ces .../Rows/R éléments qui ont un seul enfant productQuantityinttrue et la valeur de chaîne de ce seul enfant productQuantityinttrue est '0'.

+0

Bonjour Dimitre, Merci pour votre réponse. J'ai fourni un exemple maintenant avec 2 recordsets. Bien sûr, en réalité, il est de 50 et plus ensembles. Je pense que ce long chemin que j'ai emprunté pourrait aussi causer des problèmes. Ce que je ne comprends pas dans votre question est le "productQuantityinttrue [2]". Ai-je besoin de cela s'il n'y a vraiment qu'un seul "productQuantityinttrue" par jeu d'enregistrements ? – Peter

+0

@Peter: Merci de donner un exemple. Cependant, cet exemple n'illustre pas votre affirmation selon laquelle "il y a parfois des jeux d'enregistrements supprimés qui ne devraient pas l'être". Vous devez montrer un exemple où de telles suppressions indésirables se produisent, Aussi, vous devez expliquer * pourquoi * un élément supprimé ne doit pas être supprimé. Ceci est nécessaire pour modifier le modèle de correspondance du modèle vide (suppression) afin qu'il corresponde et supprime exactement les éléments voulus. –

+0

Chaque fois que "productQuantityinttrue" n'est pas "0", il ne doit pas être effacé. Donc, seuls les 0-ones doivent être supprimés. Je ne peux pas donner un exemple où des suppressions indésirables se produisent parce que localement (avec Oxygen) la sortie est toujours correcte. Seulement lors de l'exécution sur le serveur, il arrive parfois. Je vais certainement raccourcir le chemin vers "Rows/R ..." comme vous l'avez fait dans votre exemple et vérifier productQuantityinttrue = '0' et voir si cela se reproduit. Merci encore pour vos efforts, Peter – Peter

Questions connexes