定位标签 MESSAGE_RECORD/InsertChange/Bonglinjer/Bonglinje/sumDiscountedPrice/BelopFelt

Target the tag MESSAGE_RECORD/InsertChange/Bonglinjer/Bonglinje/sumDiscountedPrice/BelopFelt

我需要创建一个转换器,以便我可以将下面的XML转换为后面部分最终输出部分显示的所需输出

<?xml version="1.0" encoding="UTF-8"?>
<ns3:Bonger xmlns:ns3="http://NEXSTEP.Schemas.Bonger" xmlns:ns2="http://NEXSTEP.Schemas.NexstepTypes">
  <ROUTE_RECORD>
    <ns2:SENDER Sender_code="BO_SERVER"/>
    <ns2:RECEIPIENT Receipient_code="MASTER"/>
    <ns2:MESSAGE_ID Type_name="Bonger" Version_number="1.0"/>
    <ns2:DATE Date_of_preparation="2019-05-07+02:00" Time_of_preparation="15:14:24"/>
    <ns2:OverAllStatus>NY</ns2:OverAllStatus>
  </ROUTE_RECORD>
  <MESSAGE_RECORD>
    <InsertChange>
      <Message>
        <ns2:MessageId>1</ns2:MessageId>
        <ns2:FirmaNr>0</ns2:FirmaNr>
        <ns2:Status>NY</ns2:Status>
        <ns2:OpprettetEndretSlettet>
          <ns2:OpprettetTidspunkt>2019-05-07+02:00</ns2:OpprettetTidspunkt>
          <ns2:OpprettetKl>15:13:14.636+02:00</ns2:OpprettetKl>
          <ns2:EndretTidspunkt>2019-05-07+02:00</ns2:EndretTidspunkt>
          <ns2:EndretKl>15:14:15.492+02:00</ns2:EndretKl>
          <ns2:EndretAv>ADMIN</ns2:EndretAv>
        </ns2:OpprettetEndretSlettet>
      </Message>
      <Bongnr>B01-110</Bongnr>
      <RegisterId>B01</RegisterId>
      <DokumentType>B</DokumentType>
      <DokumentNr>B01-110</DokumentNr>
      <Avdeling>0</Avdeling>
      <KundeNr>0</KundeNr>
      <VareLager>553</VareLager>
      <BetalingsBetingelse/>
      <Brukernavn>ADMIN</Brukernavn>
      <Ordrerabatt>0</Ordrerabatt>
      <OrdrerabattSum>0</OrdrerabattSum>
      <Selger>0</Selger>
      <Bonglinjer>
        <Bonglinje xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns3:Varelinje">
          <createdTime>2019-05-07T15:13:14.636+02:00</createdTime>
          <createdBy>ADMIN</createdBy>
          <changedBy>ADMIN</changedBy>
          <sumDiscountedPrice>
            <ns2:BelopFelt>1540.0</ns2:BelopFelt>
            <ns2:Valutakode>NOK</ns2:Valutakode>
          </sumDiscountedPrice>
          <offlinePrice>false</offlinePrice>
        </Bonglinje>
      </Bonglinjer>
    </InsertChange>
  </MESSAGE_RECORD>
</ns3:Bonger>

我正在尝试以 ns3 为目标:Bonger/MESSAGE_RECORD/InsertChange/Bonglinjer/Bonglinje/sumDiscountedPrice/BelopFelt

这样我就可以在 LINES 标签内添加 CASH_RECEIPT_LINE 标签。 下面是我的 XML 变压器

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns3="http://NEXSTEP.Schemas.Bonger" xmlns:ns2="http://NEXSTEP.Schemas.NexstepTypes">
    <xsl:template match="*">
        <xsl:element name="{name()}" namespace="{namespace-uri()}">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
    <xsl:template match="/ns3:Bonger">
        <CASH_RECEIPT_LOG xmlns:xsi="urn:ifsworld-com:schemas:receive_cash_receipt_pos" xmlns:fo="http://www.w3.org/1999/XSL/Format">
            <MSG_CONTRACT>
                <xsl:value-of select="MESSAGE_RECORD/InsertChange/Avdeling"/>
            </MSG_CONTRACT>
            <MSG_DATE>
                <xsl:value-of select="concat(MESSAGE_RECORD/InsertChange/Message/ns2:OpprettetEndretSlettet/ns2:OpprettetTidspunkt, ' ',MESSAGE_RECORD/InsertChange/Message/ns2:OpprettetEndretSlettet/ns2:OpprettetKl )"/>
            </MSG_DATE>
            <CASH_RECEIPTS>
                <CASH_RECEIPT>
                    <CASH_RECEIPT_NO>
                        <xsl:value-of select="MESSAGE_RECORD/InsertChange/Bongnr"/>
                    </CASH_RECEIPT_NO>
                    <CASH_RECEIPT_DATE>
                        <xsl:value-of select="concat(MESSAGE_RECORD/InsertChange/Message/ns2:OpprettetEndretSlettet/ns2:OpprettetTidspunkt, ' ',MESSAGE_RECORD/InsertChange/Message/ns2:OpprettetEndretSlettet/ns2:OpprettetKl )"/>
                    </CASH_RECEIPT_DATE>
                    <CONTRACT>
                        <xsl:value-of select="MESSAGE_RECORD/InsertChange/Avdeling"/>
                    </CONTRACT>
                    <WORKSTATION_ID>
                        <xsl:value-of select="MESSAGE_RECORD/InsertChange/RegisterId"/>
                    </WORKSTATION_ID>
                    <EMPLOYEE_ID>
                        <xsl:value-of select="MESSAGE_RECORD/InsertChange/Brukernavn"/>
                    </EMPLOYEE_ID>
                    <CASH_REGISTER_ID>
                        <xsl:value-of select="MESSAGE_RECORD/InsertChange/RegisterId"/>
                    </CASH_REGISTER_ID>
                    <CREATE_DATE>
                        <xsl:value-of select="concat(MESSAGE_RECORD/InsertChange/Message/ns2:OpprettetEndretSlettet/ns2:OpprettetTidspunkt, ' ',MESSAGE_RECORD/InsertChange/Message/ns2:OpprettetEndretSlettet/ns2:OpprettetKl )"/>
                    </CREATE_DATE>
                    <LINES>
                        <xsl:template match="/MESSAGE_RECORD/InsertChange/Bonglinjer/Bonglinje/sumDiscountedPrice/BelopFelt[string-length() > 0]">
                         <CASH_RECEIPT_LINE>
                            <INTERNAL_TRANSACTION_CODE>INVPARTSALE</INTERNAL_TRANSACTION_CODE>
                         </CASH_RECEIPT_LINE>
                        </xsl:template>
                    </LINES>
                </CASH_RECEIPT>
            </CASH_RECEIPTS>
        </CASH_RECEIPT_LOG>
    </xsl:template>
</xsl:stylesheet>

<=========================最终输出部分(START)============= ===========>.

<CASH_RECEIPT_LOG xmlns:xsi="urn:ifsworld-com:schemas:receive_cash_receipt_pos"
                  xmlns:fo="http://www.w3.org/1999/XSL/Format"
                  xmlns:ns3="http://NEXSTEP.Schemas.Bonger"
                  xmlns:ns2="http://NEXSTEP.Schemas.NexstepTypes">
   <MSG_CONTRACT>0</MSG_CONTRACT>
   <MSG_DATE>2019-05-07+02:00 15:13:14.636+02:00</MSG_DATE>
   <CASH_RECEIPTS>
      <CASH_RECEIPT>
         <CASH_RECEIPT_NO>B01-110</CASH_RECEIPT_NO>
         <CASH_RECEIPT_DATE>2019-05-07+02:00 15:13:14.636+02:00</CASH_RECEIPT_DATE>
         <CONTRACT>0</CONTRACT>
         <WORKSTATION_ID>B01</WORKSTATION_ID>
         <EMPLOYEE_ID>ADMIN</EMPLOYEE_ID>
         <CASH_REGISTER_ID>B01</CASH_REGISTER_ID>
         <CREATE_DATE>2019-05-07+02:00 15:13:14.636+02:00</CREATE_DATE>
         <LINES>
            <CASH_RECEIPT_LINE> 
                <INTERNAL_TRANSACTION_CODE>INVPARTSALE</INTERNAL_TRANSACTION_CODE>
            </CASH_RECEIPT_LINE>    
         </LINES>
      </CASH_RECEIPT>
   </CASH_RECEIPTS>
</CASH_RECEIPT_LOG>

<=========================最终输出部分(END)============= ===========>.

如果能提供帮助,我们将不胜感激。

模板不能嵌套。而不是:

                <LINES>
                    <xsl:template match="/MESSAGE_RECORD/InsertChange/Bonglinjer/Bonglinje/sumDiscountedPrice/BelopFelt[string-length() > 0]">
                     <CASH_RECEIPT_LINE>
                        <INTERNAL_TRANSACTION_CODE>INVPARTSALE</INTERNAL_TRANSACTION_CODE>
                     </CASH_RECEIPT_LINE>
                    </xsl:template>
                </LINES>

试试这样的东西:

                <LINES>
                    <xsl:for-each select="MESSAGE_RECORD/InsertChange/Bonglinjer/Bonglinje">
                     <CASH_RECEIPT_LINE>
                        <INTERNAL_TRANSACTION_CODE>INVPARTSALE</INTERNAL_TRANSACTION_CODE>
                     </CASH_RECEIPT_LINE>
                    </xsl:for-each>
                </LINES>

我不确定这是否正是您所需要的,因为您没有解释需要在此处应用的逻辑,并且该示例只有一个 Bonglinje.


P.S。我不明白你为什么需要第一个模板;它没有应用到任何地方。