定位标签 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。我不明白你为什么需要第一个模板;它没有应用到任何地方。
我需要创建一个转换器,以便我可以将下面的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。我不明白你为什么需要第一个模板;它没有应用到任何地方。