2011-07-30 7 views
3

特定の数量が0になるレコードセットを保持するXMLファイルがあります。 これらのレコードセットを削除する必要があります。私は以下のことをしました。条件が好きであることは否定ですか?

<?xml version="1.0" encoding="UTF-8"?> 
<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> 

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

</xsl:stylesheet> 

基本的に動作します:productQuantityintrue = 0のものを除くすべてをコピーします。しかし、削除すべきではないレコードセットがあることもあります。

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

などの交渉で動作するようにそしてもちろん、私はこの最後の文が真であるものをコピーしなければならない方が良いでしょう場合は今、私の質問です。 これまで誰も経験したことがありますか?私はXMLを投稿しませんでした。なぜなら、基本的に「否定するか否定するか」ということです。

が ピーター

<?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

良い質問、+1。問題を引き起こしていることに私の答えを*推測してください(問題を再現するために常にデータを提供しています!)とその解決策です。 –

答えて

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

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

、あなたのアイデアやよろしくをありがとうこれは、基本的には動作しません:それ productQuantityinttrue = 0を持つものを除いてコピーのすべて。しかし、時には削除すべきでないレコードセット があります。

この問題を再現する例はありません

私の推測では、あなたが使用してこの問題を修正することができますことです:

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

match属性内の式はだけな.../Rows/RつだけproductQuantityinttrue子を持つ要素の文字列値を選択し、この唯一のproductQuantityinttrue子供は'0'です。

+0

Hello Dimitre、ありがとうございます。私は今、2つのレコードセットの例を提供しました。実際にはもちろん、それは50以上ですセットです。私が使った長い道のりが問題につながるかもしれないと私は思います。私があなたの質問で理解していないのは、 "productQuantityinttrue [2]"です。実際にレコードセット当たり1つの "productQuantityinttrue"がある場合は、が必要ですか? – Peter

+0

@Peter:例を提供していただきありがとうございます。ただし、この例では、「時には削除すべきではないレコードセットがある」という記述は示されていません。そのような望ましくない削除が起こる例を示す必要があります。また、削除された要素を削除しない理由を説明する必要があります。これは空の(削除している)テンプレートのマッチパターンを変更して、望みのエレメントと正確に一致して削除するために必要です。 –

+0

"productQuantityintrue"が "0"でないときは、それを削除すべきではありません。したがって、削除する必要があるのは0個だけです。ローカル(Oxygen)で出力が常に正常であるため、不要な削除が発生する例は提供できません。サーバー上で実行されている場合にのみ、時々発生します。私は間違いなく "Rows/R ..."へのパスを短縮し、あなたの例でやったようにproductQuantityinttrue = '0'をチェックして、それが再び起こるかどうかを確認します。あなたの努力のためにもう一度ありがとう、ピーター – Peter

関連する問題