Является ли отрицание предпочтением в условиях? - PullRequest
3 голосов
/ 30 июля 2011

У меня есть XML-файлы, которые содержат наборы записей, где определенное количество иногда равно 0. Теперь от этих наборов записей я должен избавиться.Я сделал следующее.

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

Он работает в основном: он копирует все, кроме продуктов с productQuantityinttrue = 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>

1 Ответ

3 голосов
/ 30 июля 2011
<!-- 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'.

...