【问题标题】:XSLT 1.0 specific output, if conditionXSLT 1.0 特定输出,如果条件
【发布时间】:2018-11-19 10:07:53
【问题描述】:

你能帮帮我吗?

如果“PackingslipId”-“LineItem”-“Lines”有不同,我不喜欢在“HeaderInformation”上有“PackingslipId”和“DeliveryDate”。

如果“LineItem”-“Lines”中的“PackingslipId”始终与“HeaderInformation”中的“PackingslipId”相同,则输出“PackingslipId”和“DeliveryDate”正常。

请注意:(如果重要,我不知道;也可以是,只有一篇文章(“LineItem”-“Lines” - 带有“OrderLineNum”1) - 在这种情况下,“PackingslipId”与“Lines”和“HeaderInformation”相同,因此“PackingslipId”和“DeliveryDate”也应该在“HeaderInformation”和“LineItem”上

我的 XML:

<?xml version="1.0" encoding="utf-8"?>
<SALESINVOICE>
	<Interchange>
		<Recipient></Recipient>
		<Sender></Sender>
		<CreationDate>2018-11-19:07:06:20</CreationDate>
		<Test>No</Test>
		<Interchange_Control_Number></Interchange_Control_Number>
		<HeaderInformation>
			<OrigInvoiceNumber>1</OrigInvoiceNumber>
			<InvoiceType>INVOIC</InvoiceType>
			<InvoiceDate>2018-11-19</InvoiceDate>
			<InvoiceNumber>FV1800087</InvoiceNumber>
			<CustomerOrderReference></CustomerOrderReference>
			<SalesOrderReference></SalesOrderReference>
			<SalesOrderDate>2018-11-15T07:22:01</SalesOrderDate>
			<PackingslipId>AV1800097</PackingslipId>
			<DeliveryDate>2018-11-19</DeliveryDate>
			<Currency>EUR</Currency>
			<TaxExempt></TaxExempt>
			<Contact />
			<TermsOfPayment>
				<PaymTermDescription></PaymTermDescription>
				<DueDate></DueDate>
			</TermsOfPayment>
			<CashDiscountConditions />
			<WeightAndVolume>
				<NetWeight></NetWeight>
				<UnifOfWeight></UnifOfWeight>
			</WeightAndVolume>
			<SupplierAddressInformation>
				<GLN></GLN>
				<Name></Name>
				<Street></Street>
				<ZipCode></ZipCode>
				<City></City>
				<Country></Country>
				<CoRegNum></CoRegNum>
				<VATNum></VATNum>
			</SupplierAddressInformation>
			<BuyerAddressInformation>
				<Name></Name>
				<Country></Country>
				<VATNum></VATNum>
				<InternalNumber></InternalNumber>
			</BuyerAddressInformation>
			<InvoiceAddressInformation>
				<GLN></GLN>
				<Name></Name>
				<Street></Street>
				<ZipCode></ZipCode>
				<City></City>
				<Country></Country>
				<VATNum></VATNum>
				<InternalNumber></InternalNumber>
			</InvoiceAddressInformation>
			<DeliveryAddressInformation>
				<GLN></GLN>
				<Name></Name>
				<Street></Street>
				<ZipCode></ZipCode>
				<City></City>
				<Country></Country>
				<State></State>
				<VATNum></VATNum>
				<InternalNumber></InternalNumber>
			</DeliveryAddressInformation>
			<TransportDetails>
				<DeliveryTerms></DeliveryTerms>
			</TransportDetails>
			<LineItem>
				<Lines>
					<OrderLineNum>1</OrderLineNum>
					<PackingslipId>AV1800097</PackingslipId>
					<DeliveryDate>2018-11-19</DeliveryDate>
					<GTIN></GTIN>
					<GTINDescription></GTINDescription>
					<SupplierArticleNumber></SupplierArticleNumber>
					<Quantity></Quantity>
					<PriceUnit></PriceUnit>
					<FixedPrice></FixedPrice>
					<SalesPrice></SalesPrice>
					<DiscAmount></DiscAmount>
					<DiscPercent></DiscPercent>
					<SalesLinePercent1></SalesLinePercent1>
					<SalesLinePercent2></SalesLinePercent2>
					<MultiLnDisc></MultiLnDisc>
					<MultiLnPercent></MultiLnPercent>
					<LineAmount></LineAmount>
					<SumLineDisc></SumLineDisc>
					<DeliveredQuantity></DeliveredQuantity>
					<VatBaseAmount></VatBaseAmount>
					<VatPercentage></VatPercentage>
					<Measure_Unit></Measure_Unit>
				</Lines>
				<Lines>
					<OrderLineNum>2</OrderLineNum>
					<PackingslipId>AV1800098</PackingslipId>
					<DeliveryDate>2018-11-19</DeliveryDate>
					<GTIN></GTIN>
					<GTINDescription></GTINDescription>
					<SupplierArticleNumber></SupplierArticleNumber>
					<Quantity></Quantity>
					<PriceUnit></PriceUnit>
					<FixedPrice></FixedPrice>
					<SalesPrice></SalesPrice>
					<DiscAmount></DiscAmount>
					<DiscPercent></DiscPercent>
					<SalesLinePercent1></SalesLinePercent1>
					<SalesLinePercent2></SalesLinePercent2>
					<MultiLnDisc></MultiLnDisc>
					<MultiLnPercent></MultiLnPercent>
					<LineAmount></LineAmount>
					<SumLineDisc></SumLineDisc>
					<DeliveredQuantity></DeliveredQuantity>
					<VatBaseAmount></VatBaseAmount>
					<VatPercentage></VatPercentage>
					<Measure_Unit></Measure_Unit>
				</Lines>
				<Lines>
					<OrderLineNum>3</OrderLineNum>
					<PackingslipId>AV1800099</PackingslipId>
					<DeliveryDate>2018-11-19</DeliveryDate>
					<GTIN></GTIN>
					<GTINDescription></GTINDescription>
					<SupplierArticleNumber></SupplierArticleNumber>
					<Quantity></Quantity>
					<PriceUnit></PriceUnit>
					<FixedPrice></FixedPrice>
					<SalesPrice></SalesPrice>
					<DiscAmount></DiscAmount>
					<DiscPercent></DiscPercent>
					<SalesLinePercent1></SalesLinePercent1>
					<SalesLinePercent2></SalesLinePercent2>
					<MultiLnDisc></MultiLnDisc>
					<MultiLnPercent></MultiLnPercent>
					<LineAmount></LineAmount>
					<SumLineDisc></SumLineDisc>
					<DeliveredQuantity></DeliveredQuantity>
					<VatBaseAmount></VatBaseAmount>
					<VatPercentage></VatPercentage>
					<Measure_Unit></Measure_Unit>
				</Lines>
				<Lines>
					<OrderLineNum>4</OrderLineNum>
					<PackingslipId>AV1800099</PackingslipId>
					<DeliveryDate>2018-11-19</DeliveryDate>
					<GTIN></GTIN>
					<GTINDescription></GTINDescription>
					<SupplierArticleNumber></SupplierArticleNumber>
					<Quantity></Quantity>
					<PriceUnit></PriceUnit>
					<FixedPrice></FixedPrice>
					<SalesPrice></SalesPrice>
					<DiscAmount></DiscAmount>
					<DiscPercent></DiscPercent>
					<SalesLinePercent1></SalesLinePercent1>
					<SalesLinePercent2></SalesLinePercent2>
					<MultiLnDisc></MultiLnDisc>
					<MultiLnPercent></MultiLnPercent>
					<LineAmount></LineAmount>
					<SumLineDisc></SumLineDisc>
					<DeliveredQuantity></DeliveredQuantity>
					<VatBaseAmount></VatBaseAmount>
					<VatPercentage></VatPercentage>
					<Measure_Unit></Measure_Unit>
				</Lines>
			</LineItem>
			<Totals>
				<InvoiceTotal></InvoiceTotal>
				<NetAmount></NetAmount>
				<VATAmount></VATAmount>
				<DiscountAmount></DiscountAmount>
				<AllowanceOrChargeAmount></AllowanceOrChargeAmount>
				<DueDate></DueDate>
				<VAT>
					<VATS>
						<Percentage></Percentage>
						<Type></Type>
						<BaseAmount></BaseAmount>
						<VATAmount></VATAmount>
					</VATS>
				</VAT>
			</Totals>
		</HeaderInformation>
	</Interchange>
</SALESINVOICE>

我的 XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" standalone="yes" indent="yes"/>
  <xsl:strip-space elements="*" />
  <xsl:key name="header_text" match="HeaderText" use="Text"/>
  <xsl:key name="line_text" match="LineText" use="concat(../OrderLineNum, '|', Text)"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- no duplilcate on HeaderText and LineText -->
  <xsl:template match="HeaderText[generate-id() != generate-id(key('header_text', Text)[1])]" />
  <xsl:template match="LineText[generate-id() != generate-id(key('line_text', concat(../OrderLineNum, '|', Text))[1])]" />
  
  <!-- delete PackingslipId on HeaderInformation, if different at Line -->
  <xsl:template match="/salesinvoices/lineItem">
    <xsl:choose>
      <xsl:when test="
      count(lines[not(PackingslipId = preceding-sibling::lines/PackingslipId)]) = 1">

        <xsl:copy-of select="//HeaderInformation/PackingslipId"/>
        <xsl:copy-of select="//HeaderInformation/DeliveryDate"/>
   
        </xsl:when>
          <xsl:otherwise>            
          </xsl:otherwise>
        </xsl:choose>
  </xsl:template>

<!-- delete empty nodes -->
 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="*[not(@*|*|comment()|processing-instruction()) and normalize-space()='']"/>
 
</xsl:stylesheet>

正确的输出应该是:(HeaderInformation 上没有 PackingslipId 和 DeliveryDate,因为 LineItem - PackingslipId 有不同)

<?xml version="1.0" encoding="utf-8"?>
<SALESINVOICE>
	<Interchange>
		<Recipient></Recipient>
		<Sender></Sender>
		<CreationDate>2018-11-19:07:06:20</CreationDate>
		<Test>No</Test>
		<Interchange_Control_Number></Interchange_Control_Number>
		<HeaderInformation>
			<OrigInvoiceNumber>1</OrigInvoiceNumber>
			<InvoiceType>INVOIC</InvoiceType>
			<InvoiceDate>2018-11-19</InvoiceDate>
			<InvoiceNumber>FV1800087</InvoiceNumber>
			<CustomerOrderReference></CustomerOrderReference>
			<SalesOrderReference></SalesOrderReference>
			<SalesOrderDate>2018-11-15T07:22:01</SalesOrderDate>			
			<Currency>EUR</Currency>
			<TaxExempt></TaxExempt>
			<Contact />
			<TermsOfPayment>
				<PaymTermDescription></PaymTermDescription>
				<DueDate></DueDate>
			</TermsOfPayment>
			<CashDiscountConditions />
			<WeightAndVolume>
				<NetWeight></NetWeight>
				<UnifOfWeight></UnifOfWeight>
			</WeightAndVolume>
			<SupplierAddressInformation>
				<GLN></GLN>
				<Name></Name>
				<Street></Street>
				<ZipCode></ZipCode>
				<City></City>
				<Country></Country>
				<CoRegNum></CoRegNum>
				<VATNum></VATNum>
			</SupplierAddressInformation>
			<BuyerAddressInformation>
				<Name></Name>
				<Country></Country>
				<VATNum></VATNum>
				<InternalNumber></InternalNumber>
			</BuyerAddressInformation>
			<InvoiceAddressInformation>
				<GLN></GLN>
				<Name></Name>
				<Street></Street>
				<ZipCode></ZipCode>
				<City></City>
				<Country></Country>
				<VATNum></VATNum>
				<InternalNumber></InternalNumber>
			</InvoiceAddressInformation>
			<DeliveryAddressInformation>
				<GLN></GLN>
				<Name></Name>
				<Street></Street>
				<ZipCode></ZipCode>
				<City></City>
				<Country></Country>
				<State></State>
				<VATNum></VATNum>
				<InternalNumber></InternalNumber>
			</DeliveryAddressInformation>
			<TransportDetails>
				<DeliveryTerms></DeliveryTerms>
			</TransportDetails>
			<LineItem>
				<Lines>
					<OrderLineNum>1</OrderLineNum>
					<PackingslipId>AV1800097</PackingslipId>
					<DeliveryDate>2018-11-19</DeliveryDate>
					<GTIN></GTIN>
					<GTINDescription></GTINDescription>
					<SupplierArticleNumber></SupplierArticleNumber>
					<Quantity></Quantity>
					<PriceUnit></PriceUnit>
					<FixedPrice></FixedPrice>
					<SalesPrice></SalesPrice>
					<DiscAmount></DiscAmount>
					<DiscPercent></DiscPercent>
					<SalesLinePercent1></SalesLinePercent1>
					<SalesLinePercent2></SalesLinePercent2>
					<MultiLnDisc></MultiLnDisc>
					<MultiLnPercent></MultiLnPercent>
					<LineAmount></LineAmount>
					<SumLineDisc></SumLineDisc>
					<DeliveredQuantity></DeliveredQuantity>
					<VatBaseAmount></VatBaseAmount>
					<VatPercentage></VatPercentage>
					<Measure_Unit></Measure_Unit>
				</Lines>
				<Lines>
					<OrderLineNum>2</OrderLineNum>
					<PackingslipId>AV1800098</PackingslipId>
					<DeliveryDate>2018-11-19</DeliveryDate>
					<GTIN></GTIN>
					<GTINDescription></GTINDescription>
					<SupplierArticleNumber></SupplierArticleNumber>
					<Quantity></Quantity>
					<PriceUnit></PriceUnit>
					<FixedPrice></FixedPrice>
					<SalesPrice></SalesPrice>
					<DiscAmount></DiscAmount>
					<DiscPercent></DiscPercent>
					<SalesLinePercent1></SalesLinePercent1>
					<SalesLinePercent2></SalesLinePercent2>
					<MultiLnDisc></MultiLnDisc>
					<MultiLnPercent></MultiLnPercent>
					<LineAmount></LineAmount>
					<SumLineDisc></SumLineDisc>
					<DeliveredQuantity></DeliveredQuantity>
					<VatBaseAmount></VatBaseAmount>
					<VatPercentage></VatPercentage>
					<Measure_Unit></Measure_Unit>
				</Lines>
				<Lines>
					<OrderLineNum>3</OrderLineNum>
					<PackingslipId>AV1800099</PackingslipId>
					<DeliveryDate>2018-11-19</DeliveryDate>
					<GTIN></GTIN>
					<GTINDescription></GTINDescription>
					<SupplierArticleNumber></SupplierArticleNumber>
					<Quantity></Quantity>
					<PriceUnit></PriceUnit>
					<FixedPrice></FixedPrice>
					<SalesPrice></SalesPrice>
					<DiscAmount></DiscAmount>
					<DiscPercent></DiscPercent>
					<SalesLinePercent1></SalesLinePercent1>
					<SalesLinePercent2></SalesLinePercent2>
					<MultiLnDisc></MultiLnDisc>
					<MultiLnPercent></MultiLnPercent>
					<LineAmount></LineAmount>
					<SumLineDisc></SumLineDisc>
					<DeliveredQuantity></DeliveredQuantity>
					<VatBaseAmount></VatBaseAmount>
					<VatPercentage></VatPercentage>
					<Measure_Unit></Measure_Unit>
				</Lines>
				<Lines>
					<OrderLineNum>4</OrderLineNum>
					<PackingslipId>AV1800099</PackingslipId>
					<DeliveryDate>2018-11-19</DeliveryDate>
					<GTIN></GTIN>
					<GTINDescription></GTINDescription>
					<SupplierArticleNumber></SupplierArticleNumber>
					<Quantity></Quantity>
					<PriceUnit></PriceUnit>
					<FixedPrice></FixedPrice>
					<SalesPrice></SalesPrice>
					<DiscAmount></DiscAmount>
					<DiscPercent></DiscPercent>
					<SalesLinePercent1></SalesLinePercent1>
					<SalesLinePercent2></SalesLinePercent2>
					<MultiLnDisc></MultiLnDisc>
					<MultiLnPercent></MultiLnPercent>
					<LineAmount></LineAmount>
					<SumLineDisc></SumLineDisc>
					<DeliveredQuantity></DeliveredQuantity>
					<VatBaseAmount></VatBaseAmount>
					<VatPercentage></VatPercentage>
					<Measure_Unit></Measure_Unit>
				</Lines>
			</LineItem>
			<Totals>
				<InvoiceTotal></InvoiceTotal>
				<NetAmount></NetAmount>
				<VATAmount></VATAmount>
				<DiscountAmount></DiscountAmount>
				<AllowanceOrChargeAmount></AllowanceOrChargeAmount>
				<DueDate></DueDate>
				<VAT>
					<VATS>
						<Percentage></Percentage>
						<Type></Type>
						<BaseAmount></BaseAmount>
						<VATAmount></VATAmount>
					</VATS>
				</VAT>
			</Totals>
		</HeaderInformation>
	</Interchange>
</SALESINVOICE>

非常感谢,

最好的问候 朱利安

【问题讨论】:

    标签: xml xslt xslt-1.0


    【解决方案1】:

    我认为您只需将这两个模板添加到您的 XSLT

    <xsl:template match="HeaderInformation[PackingslipId != LineItem/Lines/PackingslipId]/PackingslipId" />
    <xsl:template match="HeaderInformation[PackingslipId != LineItem/Lines/PackingslipId]/DeliveryDate" />
    

    或者,如果您想将这两者合二为一,只需添加此模板

    <xsl:template match="HeaderInformation[PackingslipId != LineItem/Lines/PackingslipId]/*[self::PackingslipId or self::DeliveryDate]" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 2021-07-19
      • 1970-01-01
      相关资源
      最近更新 更多