使用单个 XSLT -multiple Transformation 去除 xsi:nil =“true"和拆分 XML 文件 [英] Using single XSLT -multiple Transformation for removal of xsi:nil ="true" and splitting of XML file

查看:32
本文介绍了使用单个 XSLT -multiple Transformation 去除 xsi:nil =“true"和拆分 XML 文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正在尝试使用数据集成工具 (talend) 编写 XML 文件然后,我们在输出的 XML 上触发 tXSLT(即转换组件).基本上,我们希望一次应用两个转换.即

XML 文件的拆分并从我们的 XML 文档中删除 xsi:nil ="true" 元素.

原始 XML 文件的样子

它有销售订单信息

 <?xml version="1.0" encoding="Windows-1252"?><销售订单 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xmlfilename.xsd"><订单><订单头><CustomerPoNumber>22195175</CustomerPoNumber><OrderActionType>A</OrderActionType><NewCustomerPoNumber xsi:nil="true"></NewCustomerPoNumber><供应商 xsi:nil="true"></Supplier><客户>027885</客户><OrderDate>2016-02-12</OrderDate><InvoiceTerms xsi:nil="true"></InvoiceTerms><Currency xsi:nil="true"></Currency><ShippingInstrs xsi:nil="true"></ShippingInstrs><CustomerName>STAGE STORES DIST CTR 00601</CustomerName><ShipAddress1 xsi:nil="true"></ShipAddress1><ShipAddress2 xsi:nil="true"></ShipAddress2><ShipAddress3 xsi:nil="true"></ShipAddress3><ShipAddress4 xsi:nil="true"></ShipAddress4><ShipAddress5 xsi:nil="true"></ShipAddress5><ShipPostalCode xsi:nil="true"></ShipPostalCode><Email xsi:nil="true"></Email><OrderDiscPercent1 xsi:nil="true"></OrderDiscPercent1><OrderDiscPercent2 xsi:nil="true"></OrderDiscPercent2><OrderDiscPercent3 xsi:nil="true"></OrderDiscPercent3><仓库 xsi:nil="true"></仓库><SpecialInstrs xsi:nil="true"></SpecialInstrs><SalesOrder xsi:nil="true"></SalesOrder><OrderType xsi:nil="true"></OrderType><MultiShipCode xsi:nil="true"></MultiShipCode><ShipAddressPerLine xsi:nil="true"></ShipAddressPerLine><AlternateReference xsi:nil="true"></AlternateReference><销售员 xsi:nil="true"></销售员><Branch xsi:nil="true"></Branch><Area xsi:nil="true"></Area><RequestedShipDate xsi:nil="true"></RequestedShipDate><InvoiceNumberEntered xsi:nil="true"></InvoiceNumberEntered><InvoiceDateEntered xsi:nil="true"></InvoiceDateEntered><OrderComments xsi:nil="true"></OrderComments><Nationality xsi:nil="true"></Nationality><DeliveryTerms xsi:nil="true"></DeliveryTerms><TransactionNature xsi:nil="true"></TransactionNature><TransportMode xsi:nil="true"></TransportMode><ProcessFlag xsi:nil="true"></ProcessFlag><TaxExemptNumber xsi:nil="true"></TaxExemptNumber><TaxExemptionStatus xsi:nil="true"></TaxExemptionStatus><GstExemptNumber xsi:nil="true"></GstExemptNumber><GstExemptionStatus xsi:nil="true"></GstExemptionStatus><CompanyTaxNumber xsi:nil="true"></CompanyTaxNumber><CancelReasonCode xsi:nil="true"></CancelReasonCode><DocumentFormat xsi:nil="true"></DocumentFormat><State xsi:nil="true"></State><CountyZip xsi:nil="true"></CountyZip><City xsi:nil="true"></City><InvoiceWholeOrderOnly xsi:nil="true"></InvoiceWholeOrderOnly><SalesOrderPromoQualifyAction xsi:nil="true"></SalesOrderPromoQualifyAction><SalesOrderPromoSelectAction xsi:nil="true"></SalesOrderPromoSelectAction><GlobalTradePromotionCodes xsi:nil="true"></GlobalTradePromotionCodes><eSignature xsi:nil="true"></eSignature><SalesForceOrderNumber>ORD-380804</SalesForceOrderNumber></OrderHeader><订单头><CustomerPoNumber>22195175</CustomerPoNumber><OrderActionType>A</OrderActionType><NewCustomerPoNumber xsi:nil="true"></NewCustomerPoNumber><供应商 xsi:nil="true"></Supplier><客户>027885</客户><OrderDate>2016-02-12</OrderDate><InvoiceTerms xsi:nil="true"></InvoiceTerms><Currency xsi:nil="true"></Currency><ShippingInstrs xsi:nil="true"></ShippingInstrs><CustomerName>STAGE STORES DIST CTR 00601</CustomerName><ShipAddress1 xsi:nil="true"></ShipAddress1><ShipAddress2 xsi:nil="true"></ShipAddress2><ShipAddress3 xsi:nil="true"></ShipAddress3><ShipAddress4 xsi:nil="true"></ShipAddress4><ShipAddress5 xsi:nil="true"></ShipAddress5><ShipPostalCode xsi:nil="true"></ShipPostalCode><Email xsi:nil="true"></Email><OrderDiscPercent1 xsi:nil="true"></OrderDiscPercent1><OrderDiscPercent2 xsi:nil="true"></OrderDiscPercent2><OrderDiscPercent3 xsi:nil="true"></OrderDiscPercent3><仓库 xsi:nil="true"></仓库><SpecialInstrs xsi:nil="true"></SpecialInstrs><SalesOrder xsi:nil="true"></SalesOrder><OrderType xsi:nil="true"></OrderType><MultiShipCode xsi:nil="true"></MultiShipCode><ShipAddressPerLine xsi:nil="true"></ShipAddressPerLine><AlternateReference xsi:nil="true"></AlternateReference><销售员 xsi:nil="true"></销售员><Branch xsi:nil="true"></Branch><Area xsi:nil="true"></Area><RequestedShipDate xsi:nil="true"></RequestedShipDate><InvoiceNumberEntered xsi:nil="true"></InvoiceNumberEntered><InvoiceDateEntered xsi:nil="true"></InvoiceDateEntered><OrderComments xsi:nil="true"></OrderComments><Nationality xsi:nil="true"></Nationality><DeliveryTerms xsi:nil="true"></DeliveryTerms><TransactionNature xsi:nil="true"></TransactionNature><TransportMode xsi:nil="true"></TransportMode><ProcessFlag xsi:nil="true"></ProcessFlag><TaxExemptNumber xsi:nil="true"></TaxExemptNumber><TaxExemptionStatus xsi:nil="true"></TaxExemptionStatus><GstExemptNumber xsi:nil="true"></GstExemptNumber><GstExemptionStatus xsi:nil="true"></GstExemptionStatus><CompanyTaxNumber xsi:nil="true"></CompanyTaxNumber><CancelReasonCode xsi:nil="true"></CancelReasonCode><DocumentFormat xsi:nil="true"></DocumentFormat><State xsi:nil="true"></State><CountyZip xsi:nil="true"></CountyZip><City xsi:nil="true"></City><InvoiceWholeOrderOnly xsi:nil="true"></InvoiceWholeOrderOnly><SalesOrderPromoQualifyAction xsi:nil="true"></SalesOrderPromoQualifyAction><SalesOrderPromoSelectAction xsi:nil="true"></SalesOrderPromoSelectAction><GlobalTradePromotionCodes xsi:nil="true"></GlobalTradePromotionCodes><eSignature xsi:nil="true"></eSignature><SalesForceOrderNumber>ORD-380801</SalesForceOrderNumber></OrderHeader><订单头><CustomerPoNumber>22193037</CustomerPoNumber><OrderActionType>A</OrderActionType><NewCustomerPoNumber xsi:nil="true"></NewCustomerPoNumber><供应商 xsi:nil="true"></Supplier><客户>027886</客户><OrderDate>2016-02-11</OrderDate><InvoiceTerms xsi:nil="true"></InvoiceTerms><Currency xsi:nil="true"></Currency><ShippingInstrs xsi:nil="true"></ShippingInstrs><CustomerName>STAGE STORES DIST CTR 05099</CustomerName><ShipAddress1 xsi:nil="true"></ShipAddress1><ShipAddress2 xsi:nil="true"></ShipAddress2><ShipAddress3 xsi:nil="true"></ShipAddress3><ShipAddress4 xsi:nil="true"></ShipAddress4><ShipAddress5 xsi:nil="true"></ShipAddress5><ShipPostalCode xsi:nil="true"></ShipPostalCode><Email xsi:nil="true"></Email><OrderDiscPercent1 xsi:nil="true"></OrderDiscPercent1><OrderDiscPercent2 xsi:nil="true"></OrderDiscPercent2><OrderDiscPercent3 xsi:nil="true"></OrderDiscPercent3><仓库 xsi:nil="true"></仓库><SpecialInstrs xsi:nil="true"></SpecialInstrs><SalesOrder xsi:nil="true"></SalesOrder><OrderType xsi:nil="true"></OrderType><MultiShipCode xsi:nil="true"></MultiShipCode><ShipAddressPerLine xsi:nil="true"></ShipAddressPerLine><AlternateReference xsi:nil="true"></AlternateReference><销售员 xsi:nil="true"></销售员><Branch xsi:nil="true"></Branch><Area xsi:nil="true"></Area><RequestedShipDate xsi:nil="true"></RequestedShipDate><InvoiceNumberEntered xsi:nil="true"></InvoiceNumberEntered><InvoiceDateEntered xsi:nil="true"></InvoiceDateEntered><OrderComments xsi:nil="true"></OrderComments><Nationality xsi:nil="true"></Nationality><DeliveryTerms xsi:nil="true"></DeliveryTerms><TransactionNature xsi:nil="true"></TransactionNature><TransportMode xsi:nil="true"></TransportMode><ProcessFlag xsi:nil="true"></ProcessFlag><TaxExemptNumber xsi:nil="true"></TaxExemptNumber><TaxExemptionStatus xsi:nil="true"></TaxExemptionStatus><GstExemptNumber xsi:nil="true"></GstExemptNumber><GstExemptionStatus xsi:nil="true"></GstExemptionStatus><CompanyTaxNumber xsi:nil="true"></CompanyTaxNumber><CancelReasonCode xsi:nil="true"></CancelReasonCode><DocumentFormat xsi:nil="true"></DocumentFormat><State xsi:nil="true"></State><CountyZip xsi:nil="true"></CountyZip><City xsi:nil="true"></City><InvoiceWholeOrderOnly xsi:nil="true"></InvoiceWholeOrderOnly><SalesOrderPromoQualifyAction xsi:nil="true"></SalesOrderPromoQualifyAction><SalesOrderPromoSelectAction xsi:nil="true"></SalesOrderPromoSelectAction><GlobalTradePromotionCodes xsi:nil="true"></GlobalTradePromotionCodes><eSignature xsi:nil="true"></eSignature><SalesForceOrderNumber>ORD-380813</SalesForceOrderNumber></OrderHeader><订单详情><库存线><CustomerPoLine>9999</CustomerPoLine><LineCancelCode xsi:nil="true"></LineCancelCode><StockCode>JBLC-SMH-16OZ-01</StockCode><StockDescription>SMH 牙买加 LI COND.16OZ<仓库 xsi:nil="true"></仓库><CustomersPartNumber xsi:nil="true"></CustomersPartNumber><OrderQty>3.0</OrderQty><OrderUom>EA</OrderUom><价格>7.14</价格><PriceUom>EA</PriceUom><PriceCode xsi:nil="true"></PriceCode><AlwaysUsePriceEntered>Y</AlwaysUsePriceEntered><Units xsi:nil="true"></Units><Pieces xsi:nil="true"></Pieces><ProductClass xsi:nil="true"></ProductClass><LineDiscPercent1 xsi:nil="true"></LineDiscPercent1><LineDiscPercent2 xsi:nil="true"></LineDiscPercent2><LineDiscPercent3 xsi:nil="true"></LineDiscPercent3><AlwaysUseDiscountEntered xsi:nil="true"></AlwaysUseDiscountEntered><CustRequestDate xsi:nil="true"></CustRequestDate><CommissionCode xsi:nil="true"></CommissionCode><LineShipDate xsi:nil="true"></LineShipDate><LineDiscValue xsi:nil="true"></LineDiscValue><LineDiscValFlag xsi:nil="true"></LineDiscValFlag><OverrideCalculatedDiscount xsi:nil="true"></OverrideCalculatedDiscount><UserDefined>18</UserDefined><NonStockedLine xsi:nil="true"></NonStockedLine><NsProductClass xsi:nil="true"></NsProductClass><NsUnitCost xsi:nil="true"></NsUnitCost><UnitMass xsi:nil="true"></UnitMass><UnitVolume xsi:nil="true"></UnitVolume><StockTaxCode xsi:nil="true"></StockTaxCode><StockNotTaxable xsi:nil="true"></StockNotTaxable><StockFstCode xsi:nil="true"></StockFstCode><StockNotFstTaxable xsi:nil="true"></StockNotFstTaxable><AllocationAction xsi:nil="true"></AllocationAction><ConfigPrintInv xsi:nil="true"></ConfigPrintInv><ConfigPrintDel xsi:nil="true"></ConfigPrintDel><ConfigPrintAck xsi:nil="true"></ConfigPrintAck><TariffCode xsi:nil="true"></TariffCode><LineMultiShipCode xsi:nil="true"></LineMultiShipCode><SupplementaryUnitsFactor xsi:nil="true"></SupplementaryUnitsFactor><ReserveStock xsi:nil="true"></ReserveStock><ReserveStockRequestAllocs xsi:nil="true"></ReserveStockRequestAllocs><TradePromotionCodes xsi:nil="true"></TradePromotionCodes></StockLine></订单详情></订单></销售订单>

我们试过了以下 xslt 样式表:**

它同时讲述了两个模板.但是当我同时申请时它对我们不起作用.它只拆分了 XML,但没有从原始 XML 中删除 xsi:nil ="true" 元素.但是当我单独申请时,它会从文档中删除标签 xsi:nil ="true".

这里是XSL文件的描述

<xsl:output method="xml" indent="yes"/><xsl:output encoding="Windows-1252"/><xsl:template match="*/@*"/><xsl:template match="@*|node()"><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:模板><xsl:template match="/"><xsl:for-each-group select="SalesOrders/Orders" group-by="OrderHeader"><xsl:result-document href="SORTOIDOC{position()}.xml"><销售订单><xsl:copy-of select="current-group()"/></销售订单></xsl:result-document></xsl:for-each-group></xsl:模板></xsl:stylesheet>

**

每个拆分的 XML 的 OutPut 在拆分和删除 xsi:nil 后应该看起来像这样

**

对此的任何帮助将不胜感激.

提前致谢.

解决方案

它同时讲述了两个模板.但是当我同时申请时同时它对我们不起作用.它只拆分了 XML 但没有拆分从原始 XML 中删除 xsi:nil ="true" 元素.

那是因为您的前两个模板从未被应用.您的最后一个模板,即与根 / 节点匹配的模板,是第一个要执行的模板——并且该模板不包含任何 xsl:apply-templates 指令.>

如果你改变:

到:

你会得到预期的结果.

<小时>

附言请注意,您的第一个模板:

将删除 所有 属性,而不仅仅是您问题中所述的 xsi:nil ="true" 属性.为了使其完全如所述那样工作,需要将其更改为:

<xsl:template match="@xsi:nil[.='true']" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>

<小时>

添加:

<块引用>

问题是在拆分位于以下位置的文件命名空间前缀之后<订单 xmlns:xsi="w3.org/2001/XMLSchema-instance">;代替 根元素

为避免这种情况,请更改:

到:

总而言之,您的样式表应如下所示:

XSLT 2.0

<xsl:output method="xml" encoding="Windows-1252" indent="yes"/><xsl:template match="@xsi:nil[.='true']" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><xsl:template match="@*|node()"><xsl:copy copy-namespaces="no"><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:模板><xsl:template match="/"><xsl:for-each-group select="SalesOrders/Orders" group-by="OrderHeader"><xsl:result-document href="SORTOIDOC{position()}.xml"><销售订单 xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="xmlfilename.XSD"><xsl:apply-templates select="current-group()"/></销售订单></xsl:result-document></xsl:for-each-group></xsl:模板></xsl:stylesheet>

<小时>

添加了 2 个:

恕我直言,您向我们展示的拆分没有像您声称的那样正常工作.但这应该是另一个问题的主题.

We are trying to write XML file using data integration tool (talend) ) then,We triggered tXSLT (that is transformation component) over outputted XML. Basically, we want to apply two transformation at a time. that is

splitting of XML file and removal of xsi:nil ="true" element from our XML document.

Original XML file Look like

It has SalesOrders information

 <?xml version="1.0" encoding="Windows-1252"?>

<SalesOrders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xmlfilename.xsd">
  <Orders>
    <OrderHeader>
      <CustomerPoNumber>22195175</CustomerPoNumber>
      <OrderActionType>A</OrderActionType>
      <NewCustomerPoNumber xsi:nil="true"></NewCustomerPoNumber>
      <Supplier xsi:nil="true"></Supplier>
      <Customer>027885</Customer>
      <OrderDate>2016-02-12</OrderDate>
      <InvoiceTerms xsi:nil="true"></InvoiceTerms>
      <Currency xsi:nil="true"></Currency>
      <ShippingInstrs xsi:nil="true"></ShippingInstrs>
      <CustomerName>STAGE STORES DIST CTR 00601</CustomerName>
      <ShipAddress1 xsi:nil="true"></ShipAddress1>
      <ShipAddress2 xsi:nil="true"></ShipAddress2>
      <ShipAddress3 xsi:nil="true"></ShipAddress3>
      <ShipAddress4 xsi:nil="true"></ShipAddress4>
      <ShipAddress5 xsi:nil="true"></ShipAddress5>
      <ShipPostalCode xsi:nil="true"></ShipPostalCode>
      <Email xsi:nil="true"></Email>
      <OrderDiscPercent1 xsi:nil="true"></OrderDiscPercent1>
      <OrderDiscPercent2 xsi:nil="true"></OrderDiscPercent2>
      <OrderDiscPercent3 xsi:nil="true"></OrderDiscPercent3>
      <Warehouse xsi:nil="true"></Warehouse>
      <SpecialInstrs xsi:nil="true"></SpecialInstrs>
      <SalesOrder xsi:nil="true"></SalesOrder>
      <OrderType xsi:nil="true"></OrderType>
      <MultiShipCode xsi:nil="true"></MultiShipCode>
      <ShipAddressPerLine xsi:nil="true"></ShipAddressPerLine>
      <AlternateReference xsi:nil="true"></AlternateReference>
      <Salesperson xsi:nil="true"></Salesperson>
      <Branch xsi:nil="true"></Branch>
      <Area xsi:nil="true"></Area>
      <RequestedShipDate xsi:nil="true"></RequestedShipDate>
      <InvoiceNumberEntered xsi:nil="true"></InvoiceNumberEntered>
      <InvoiceDateEntered xsi:nil="true"></InvoiceDateEntered>
      <OrderComments xsi:nil="true"></OrderComments>
      <Nationality xsi:nil="true"></Nationality>
      <DeliveryTerms xsi:nil="true"></DeliveryTerms>
      <TransactionNature xsi:nil="true"></TransactionNature>
      <TransportMode xsi:nil="true"></TransportMode>
      <ProcessFlag xsi:nil="true"></ProcessFlag>
      <TaxExemptNumber xsi:nil="true"></TaxExemptNumber>
      <TaxExemptionStatus xsi:nil="true"></TaxExemptionStatus>
      <GstExemptNumber xsi:nil="true"></GstExemptNumber>
      <GstExemptionStatus xsi:nil="true"></GstExemptionStatus>
      <CompanyTaxNumber xsi:nil="true"></CompanyTaxNumber>
      <CancelReasonCode xsi:nil="true"></CancelReasonCode>
      <DocumentFormat xsi:nil="true"></DocumentFormat>
      <State xsi:nil="true"></State>
      <CountyZip xsi:nil="true"></CountyZip>
      <City xsi:nil="true"></City>
      <InvoiceWholeOrderOnly xsi:nil="true"></InvoiceWholeOrderOnly>
      <SalesOrderPromoQualifyAction xsi:nil="true"></SalesOrderPromoQualifyAction>
      <SalesOrderPromoSelectAction xsi:nil="true"></SalesOrderPromoSelectAction>
      <GlobalTradePromotionCodes xsi:nil="true"></GlobalTradePromotionCodes>
      <eSignature xsi:nil="true"></eSignature>
      <SalesForceOrderNumber>ORD-380804</SalesForceOrderNumber>
    </OrderHeader>
    <OrderHeader>
      <CustomerPoNumber>22195175</CustomerPoNumber>
      <OrderActionType>A</OrderActionType>
      <NewCustomerPoNumber xsi:nil="true"></NewCustomerPoNumber>
      <Supplier xsi:nil="true"></Supplier>
      <Customer>027885</Customer>
      <OrderDate>2016-02-12</OrderDate>
      <InvoiceTerms xsi:nil="true"></InvoiceTerms>
      <Currency xsi:nil="true"></Currency>
      <ShippingInstrs xsi:nil="true"></ShippingInstrs>
      <CustomerName>STAGE STORES DIST CTR 00601</CustomerName>
      <ShipAddress1 xsi:nil="true"></ShipAddress1>
      <ShipAddress2 xsi:nil="true"></ShipAddress2>
      <ShipAddress3 xsi:nil="true"></ShipAddress3>
      <ShipAddress4 xsi:nil="true"></ShipAddress4>
      <ShipAddress5 xsi:nil="true"></ShipAddress5>
      <ShipPostalCode xsi:nil="true"></ShipPostalCode>
      <Email xsi:nil="true"></Email>
      <OrderDiscPercent1 xsi:nil="true"></OrderDiscPercent1>
      <OrderDiscPercent2 xsi:nil="true"></OrderDiscPercent2>
      <OrderDiscPercent3 xsi:nil="true"></OrderDiscPercent3>
      <Warehouse xsi:nil="true"></Warehouse>
      <SpecialInstrs xsi:nil="true"></SpecialInstrs>
      <SalesOrder xsi:nil="true"></SalesOrder>
      <OrderType xsi:nil="true"></OrderType>
      <MultiShipCode xsi:nil="true"></MultiShipCode>
      <ShipAddressPerLine xsi:nil="true"></ShipAddressPerLine>
      <AlternateReference xsi:nil="true"></AlternateReference>
      <Salesperson xsi:nil="true"></Salesperson>
      <Branch xsi:nil="true"></Branch>
      <Area xsi:nil="true"></Area>
      <RequestedShipDate xsi:nil="true"></RequestedShipDate>
      <InvoiceNumberEntered xsi:nil="true"></InvoiceNumberEntered>
      <InvoiceDateEntered xsi:nil="true"></InvoiceDateEntered>
      <OrderComments xsi:nil="true"></OrderComments>
      <Nationality xsi:nil="true"></Nationality>
      <DeliveryTerms xsi:nil="true"></DeliveryTerms>
      <TransactionNature xsi:nil="true"></TransactionNature>
      <TransportMode xsi:nil="true"></TransportMode>
      <ProcessFlag xsi:nil="true"></ProcessFlag>
      <TaxExemptNumber xsi:nil="true"></TaxExemptNumber>
      <TaxExemptionStatus xsi:nil="true"></TaxExemptionStatus>
      <GstExemptNumber xsi:nil="true"></GstExemptNumber>
      <GstExemptionStatus xsi:nil="true"></GstExemptionStatus>
      <CompanyTaxNumber xsi:nil="true"></CompanyTaxNumber>
      <CancelReasonCode xsi:nil="true"></CancelReasonCode>
      <DocumentFormat xsi:nil="true"></DocumentFormat>
      <State xsi:nil="true"></State>
      <CountyZip xsi:nil="true"></CountyZip>
      <City xsi:nil="true"></City>
      <InvoiceWholeOrderOnly xsi:nil="true"></InvoiceWholeOrderOnly>
      <SalesOrderPromoQualifyAction xsi:nil="true"></SalesOrderPromoQualifyAction>
      <SalesOrderPromoSelectAction xsi:nil="true"></SalesOrderPromoSelectAction>
      <GlobalTradePromotionCodes xsi:nil="true"></GlobalTradePromotionCodes>
      <eSignature xsi:nil="true"></eSignature>
      <SalesForceOrderNumber>ORD-380801</SalesForceOrderNumber>
    </OrderHeader>
    <OrderHeader>
      <CustomerPoNumber>22193037</CustomerPoNumber>
      <OrderActionType>A</OrderActionType>
      <NewCustomerPoNumber xsi:nil="true"></NewCustomerPoNumber>
      <Supplier xsi:nil="true"></Supplier>
      <Customer>027886</Customer>
      <OrderDate>2016-02-11</OrderDate>
      <InvoiceTerms xsi:nil="true"></InvoiceTerms>
      <Currency xsi:nil="true"></Currency>
      <ShippingInstrs xsi:nil="true"></ShippingInstrs>
      <CustomerName>STAGE STORES DIST CTR 05099</CustomerName>
      <ShipAddress1 xsi:nil="true"></ShipAddress1>
      <ShipAddress2 xsi:nil="true"></ShipAddress2>
      <ShipAddress3 xsi:nil="true"></ShipAddress3>
      <ShipAddress4 xsi:nil="true"></ShipAddress4>
      <ShipAddress5 xsi:nil="true"></ShipAddress5>
      <ShipPostalCode xsi:nil="true"></ShipPostalCode>
      <Email xsi:nil="true"></Email>
      <OrderDiscPercent1 xsi:nil="true"></OrderDiscPercent1>
      <OrderDiscPercent2 xsi:nil="true"></OrderDiscPercent2>
      <OrderDiscPercent3 xsi:nil="true"></OrderDiscPercent3>
      <Warehouse xsi:nil="true"></Warehouse>
      <SpecialInstrs xsi:nil="true"></SpecialInstrs>
      <SalesOrder xsi:nil="true"></SalesOrder>
      <OrderType xsi:nil="true"></OrderType>
      <MultiShipCode xsi:nil="true"></MultiShipCode>
      <ShipAddressPerLine xsi:nil="true"></ShipAddressPerLine>
      <AlternateReference xsi:nil="true"></AlternateReference>
      <Salesperson xsi:nil="true"></Salesperson>
      <Branch xsi:nil="true"></Branch>
      <Area xsi:nil="true"></Area>
      <RequestedShipDate xsi:nil="true"></RequestedShipDate>
      <InvoiceNumberEntered xsi:nil="true"></InvoiceNumberEntered>
      <InvoiceDateEntered xsi:nil="true"></InvoiceDateEntered>
      <OrderComments xsi:nil="true"></OrderComments>
      <Nationality xsi:nil="true"></Nationality>
      <DeliveryTerms xsi:nil="true"></DeliveryTerms>
      <TransactionNature xsi:nil="true"></TransactionNature>
      <TransportMode xsi:nil="true"></TransportMode>
      <ProcessFlag xsi:nil="true"></ProcessFlag>
      <TaxExemptNumber xsi:nil="true"></TaxExemptNumber>
      <TaxExemptionStatus xsi:nil="true"></TaxExemptionStatus>
      <GstExemptNumber xsi:nil="true"></GstExemptNumber>
      <GstExemptionStatus xsi:nil="true"></GstExemptionStatus>
      <CompanyTaxNumber xsi:nil="true"></CompanyTaxNumber>
      <CancelReasonCode xsi:nil="true"></CancelReasonCode>
      <DocumentFormat xsi:nil="true"></DocumentFormat>
      <State xsi:nil="true"></State>
      <CountyZip xsi:nil="true"></CountyZip>
      <City xsi:nil="true"></City>
      <InvoiceWholeOrderOnly xsi:nil="true"></InvoiceWholeOrderOnly>
      <SalesOrderPromoQualifyAction xsi:nil="true"></SalesOrderPromoQualifyAction>
      <SalesOrderPromoSelectAction xsi:nil="true"></SalesOrderPromoSelectAction>
      <GlobalTradePromotionCodes xsi:nil="true"></GlobalTradePromotionCodes>
      <eSignature xsi:nil="true"></eSignature>
      <SalesForceOrderNumber>ORD-380813</SalesForceOrderNumber>
    </OrderHeader>
    <OrderDetails>
      <StockLine>
        <CustomerPoLine>9999</CustomerPoLine>
        <LineCancelCode xsi:nil="true"></LineCancelCode>
        <StockCode>JBLC-SMH-16OZ-01</StockCode>
        <StockDescription>SMH JAMAICAN LI COND. 16OZ</StockDescription>
        <Warehouse xsi:nil="true"></Warehouse>
        <CustomersPartNumber xsi:nil="true"></CustomersPartNumber>
        <OrderQty>3.0</OrderQty>
        <OrderUom>EA</OrderUom>
        <Price>7.14</Price>
        <PriceUom>EA</PriceUom>
        <PriceCode xsi:nil="true"></PriceCode>
        <AlwaysUsePriceEntered>Y</AlwaysUsePriceEntered>
        <Units xsi:nil="true"></Units>
        <Pieces xsi:nil="true"></Pieces>
        <ProductClass xsi:nil="true"></ProductClass>
        <LineDiscPercent1 xsi:nil="true"></LineDiscPercent1>
        <LineDiscPercent2 xsi:nil="true"></LineDiscPercent2>
        <LineDiscPercent3 xsi:nil="true"></LineDiscPercent3>
        <AlwaysUseDiscountEntered xsi:nil="true"></AlwaysUseDiscountEntered>
        <CustRequestDate xsi:nil="true"></CustRequestDate>
        <CommissionCode xsi:nil="true"></CommissionCode>
        <LineShipDate xsi:nil="true"></LineShipDate>
        <LineDiscValue xsi:nil="true"></LineDiscValue>
        <LineDiscValFlag xsi:nil="true"></LineDiscValFlag>
        <OverrideCalculatedDiscount xsi:nil="true"></OverrideCalculatedDiscount>
        <UserDefined>18</UserDefined>
        <NonStockedLine xsi:nil="true"></NonStockedLine>
        <NsProductClass xsi:nil="true"></NsProductClass>
        <NsUnitCost xsi:nil="true"></NsUnitCost>
        <UnitMass xsi:nil="true"></UnitMass>
        <UnitVolume xsi:nil="true"></UnitVolume>
        <StockTaxCode xsi:nil="true"></StockTaxCode>
        <StockNotTaxable xsi:nil="true"></StockNotTaxable>
        <StockFstCode xsi:nil="true"></StockFstCode>
        <StockNotFstTaxable xsi:nil="true"></StockNotFstTaxable>
        <AllocationAction xsi:nil="true"></AllocationAction>
        <ConfigPrintInv xsi:nil="true"></ConfigPrintInv>
        <ConfigPrintDel xsi:nil="true"></ConfigPrintDel>
        <ConfigPrintAck xsi:nil="true"></ConfigPrintAck>
        <TariffCode xsi:nil="true"></TariffCode>
        <LineMultiShipCode xsi:nil="true"></LineMultiShipCode>
        <SupplementaryUnitsFactor xsi:nil="true"></SupplementaryUnitsFactor>
        <ReserveStock xsi:nil="true"></ReserveStock>
        <ReserveStockRequestAllocs xsi:nil="true"></ReserveStockRequestAllocs>
        <TradePromotionCodes xsi:nil="true"></TradePromotionCodes>
      </StockLine>
    </OrderDetails>
  </Orders>
</SalesOrders>

We tried following xslt stylesheet on it : **

It tells about two template at at time. But when i am applying both at same time it is not working fo us. it only split the XML but did not remove xsi:nil ="true" element from Original XML. but when i am applying on seperate basis it removes the tag xsi:nil ="true" from documents.

Here is description of XSL file

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:output encoding="Windows-1252"/>
<xsl:template match="*/@*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
        <xsl:for-each-group select="SalesOrders/Orders" group-by="OrderHeader">
            <xsl:result-document href="SORTOIDOC{position()}.xml">
                <SalesOrders>
                    <xsl:copy-of select="current-group()"/>
                </SalesOrders>
            </xsl:result-document>
        </xsl:for-each-group>
    </xsl:template>
</xsl:stylesheet>

**

OutPut of each splitted XML should look like after split and removal of xsi:nil

**<?xml version="1.0" encoding="Windows-1252"?>

<SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="xmlfilename.XSD">
<Orders>
    <OrderHeader>
      <CustomerPoNumber>C1000</CustomerPoNumber>
      <OrderActionType>A</OrderActionType>
      <NewCustomerPoNumber/>
      <Supplier/>
      <Customer>000010</Customer>
      <OrderDate>2006-11-04</OrderDate>
      <InvoiceTerms>0</InvoiceTerms>
      <Currency>$</Currency>
      <ShippingInstrs>Ship via Hong Kong</ShippingInstrs>
      <CustomerName>The SYSPRO Outdoors Company</CustomerName>
      <ShipAddress1>This is the alternate delivery address 1</ShipAddress1>
      <ShipAddress2>This is the alternate delivery address 2</ShipAddress2>
      <ShipAddress3>This is the alternate delivery address 3</ShipAddress3>
      <ShipAddress4>This is the alternate delivery address 4</ShipAddress4>
      <ShipAddress5>This is the alternate delivery address 5</ShipAddress5>
      <ShipPostalCode>90210</ShipPostalCode>
      <Email>Sender001@Sender001.com</Email>
      <OrderDiscPercent1>2.50</OrderDiscPercent1>
      <OrderDiscPercent2>1.50</OrderDiscPercent2>
      <OrderDiscPercent3>1.00</OrderDiscPercent3>
      <Warehouse>E</Warehouse>
      <SpecialInstrs>Handle with care</SpecialInstrs>
      <SalesOrder>221124</SalesOrder>
      <OrderType>1</OrderType>
      <MultiShipCode/>
      <ShipAddressPerLine/>
      <AlternateReference/>
      <Salesperson>100</Salesperson>
      <Branch/>
      <Area/>
      <RequestedShipDate>2006-12-20</RequestedShipDate>
      <InvoiceNumberEntered/>
      <InvoiceDateEntered/>
      <OrderComments/>
      <Nationality/>
      <DeliveryTerms/>
      <TransactionNature/>
      <TransportMode/>
      <ProcessFlag/>
      <TaxExemptNumber/>
      <TaxExemptionStatus/>
      <GstExemptNumber/>
      <GstExemptionStatus/>
      <CompanyTaxNumber/>
      <CancelReasonCode/>
      <DocumentFormat/>
      <State/>
      <CountyZip/>
      <City/>
      <InvoiceWholeOrderOnly/>
      <SalesOrderPromoQualifyAction>W</SalesOrderPromoQualifyAction>
      <SalesOrderPromoSelectAction>A</SalesOrderPromoSelectAction>
      <GlobalTradePromotionCodes>GLACC,GLFREE</GlobalTradePromotionCodes>
      <eSignature/>
    </OrderHeader>
    <OrderDetails>
      <StockLine>
        <CustomerPoLine>1</CustomerPoLine>
        <LineActionType>A</LineActionType>
        <LineCancelCode/>
        <StockCode>B100</StockCode>
        <StockDescription>Bicycle</StockDescription>
        <Warehouse>FG</Warehouse>
        <CustomersPartNumber>FF334221</CustomersPartNumber>
        <OrderQty>5</OrderQty>
        <OrderUom>EA</OrderUom>
        <Price>400</Price>
        <PriceUom>EA</PriceUom>
        <PriceCode/>
        <AlwaysUsePriceEntered/>
        <Units/>
        <Pieces/>
        <ProductClass/>
        <LineDiscPercent1>0.5</LineDiscPercent1>
        <LineDiscPercent2>0</LineDiscPercent2>
        <LineDiscPercent3>0</LineDiscPercent3>
        <AlwaysUseDiscountEntered>N</AlwaysUseDiscountEntered>
        <CustRequestDate>2006-12-20</CustRequestDate>
        <CommissionCode/>
        <LineShipDate/>
        <LineDiscValue>0</LineDiscValue>
        <LineDiscValFlag/>
        <OverrideCalculatedDiscount/>
        <UserDefined>USER</UserDefined>
        <NonStockedLine/>
        <NsProductClass>NSPR</NsProductClass>
        <NsUnitCost/>
        <UnitMass/>
        <UnitVolume/>
        <StockTaxCode/>
        <StockNotTaxable/>
        <StockFstCode/>
        <StockNotFstTaxable/>
        <AllocationAction/>
        <ConfigPrintInv/>
        <ConfigPrintDel/>
        <ConfigPrintAck/>
        <TariffCode/>
        <LineMultiShipCode/>
        <SupplementaryUnitsFactor/>
        <ReserveStock/>
        <ReserveStockRequestAllocs/>
        <TradePromotionCodes>BIKEACCR,FREE1</TradePromotionCodes>
      </StockLine>
   </OrderDetails>
  </Orders>
</SalesOrders>**

Any help on it would be much appreciated.

Thanks in advance.

解决方案

It tells about two template at at time. But when i am applying both at same time it is not working fo us. it only split the XML but did not remove xsi:nil ="true" element from Original XML.

That's because your first two templates are never applied. Your last template, the one matching the root / node, is the first one to be executed - and this template does not contain any xsl:apply-templates instructions.

If you change:

<xsl:copy-of select="current-group()"/>

to:

<xsl:apply-templates select="current-group()"/>

you will get the expected result.


P.S. Note that your first template:

<xsl:template match="*/@*"/>

will remove all attributes, not only the xsi:nil ="true" ones as stated in your question. To make it work exactly as stated, it needs to be changed to:

<xsl:template match="@xsi:nil[.='true']" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>


Added:

Problem is after splitting the file namespace prefix situated at <Orders xmlns:xsi="w3.org/2001/XMLSchema-instance">; instead of <SalesOrders> root element

To avoid this, change:

<xsl:copy>

to:

<xsl:copy copy-namespaces="no">

To summarize, your stylesheet should look like this:

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="Windows-1252" indent="yes"/>

<xsl:template match="@xsi:nil[.='true']" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>

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

<xsl:template match="/">
    <xsl:for-each-group select="SalesOrders/Orders" group-by="OrderHeader">
        <xsl:result-document href="SORTOIDOC{position()}.xml">
            <SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="xmlfilename.XSD">
                <xsl:apply-templates select="current-group()"/>
            </SalesOrders>
        </xsl:result-document>
    </xsl:for-each-group>
</xsl:template>

</xsl:stylesheet>


Added 2:

IMHO, the splitting you show us does not work correctly as you claim. But that should be subject for another question.

这篇关于使用单个 XSLT -multiple Transformation 去除 xsi:nil =“true"和拆分 XML 文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆