Преобразовать формат даты ответа XML из ГГГГ-ММ-ДДТ00: 00: 00 в ДД / ММ / ГГГГ с помощью XSLT - PullRequest
1 голос
/ 03 апреля 2019

My XML версия ответа "1.0" представляет разные даты сбора в массиве в элементе, формат - 2019-04-04T00: 00: 00, и я хочу использовать XSLT версия "1.0" для преобразования формата даты в 04/04/2019 (ДД / ММ / ГГГГ) в каждом повторяющемся элементе. Я попытался найти несколько решений или объединить это с другими преобразованиями, которые я делаю, но это делает их ошибочными, поэтому я просто хотел бы преобразовать таблицу стилей, как показано ниже, а затем я преобразую остальные отдельно

ОТВЕТНЫЙ XML С ФОРМАТОМ НЕПРАВИЛЬНОЙ ДАТЫ

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soap:Body>
      <GetFullSiteCollectionsResponse xmlns="http://webservices.whitespacews.com/">
         <GetFullSiteCollectionsResult>
            <ErrorCode>0</ErrorCode>
            <ErrorDescription>Success</ErrorDescription>
            <SuccessFlag>true</SuccessFlag>
            <SiteServices>
               <ApiSiteServiceWithExtraDetails>
                  <SiteService>                     
                     <SiteServiceItemQuantity>1.0000</SiteServiceItemQuantity>
                     <SiteServiceItemID>17222</SiteServiceItemID>
                     <NextCollectionDate>2019-04-04T00:00:00</NextCollectionDate>
                  </SiteService>
                  <RRASSContractRounds>
                     <RRASSContractRound>                                                   
                        <RoundCodeOnly>GDN2</RoundCodeOnly>
                        <DefaultDeviceType>STREET</DefaultDeviceType>
                     </RRASSContractRound>
                  </RRASSContractRounds>
               </ApiSiteServiceWithExtraDetails>
               <ApiSiteServiceWithExtraDetails>
                  <SiteService>                     
                     <SiteServiceItemQuantity>1.0000</SiteServiceItemQuantity>
                     <SiteServiceItemID>17220</SiteServiceItemID>
                     <NextCollectionDate>2019-04-11T00:00:00</NextCollectionDate>
                  </SiteService>
                  <RRASSContractRounds>
                     <RRASSContractRound>                                                
                        <RoundCodeOnly>REC3</RoundCodeOnly>
                        <DefaultDeviceType>STREET</DefaultDeviceType>
                     </RRASSContractRound>
                  </RRASSContractRounds>
               </ApiSiteServiceWithExtraDetails>                              
            </SiteServices>
         </GetFullSiteCollectionsResult>
      </GetFullSiteCollectionsResponse>
   </soap:Body>
</soap:Envelope>

желаемый результат

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soap:Body>
      <GetFullSiteCollectionsResponse xmlns="http://webservices.whitespacews.com/">
         <GetFullSiteCollectionsResult>
            <ErrorCode>0</ErrorCode>
            <ErrorDescription>Success</ErrorDescription>
            <SuccessFlag>true</SuccessFlag>
            <SiteServices>
               <ApiSiteServiceWithExtraDetails>
                  <SiteService>                     
                     <SiteServiceItemQuantity>1.0000</SiteServiceItemQuantity>
                     <SiteServiceItemID>17222</SiteServiceItemID>
                     <NextCollectionDate>04/04/2019</NextCollectionDate>
                  </SiteService>
                  <RRASSContractRounds>
                     <RRASSContractRound>                                
                        <RoundCodeOnly>GDN2</RoundCodeOnly>
                        <DefaultDeviceType>STREET</DefaultDeviceType>
                     </RRASSContractRound>
                  </RRASSContractRounds>
               </ApiSiteServiceWithExtraDetails>
               <ApiSiteServiceWithExtraDetails>
                  <SiteService>                     
                     <SiteServiceItemQuantity>1.0000</SiteServiceItemQuantity>
                     <SiteServiceItemID>17220</SiteServiceItemID>
                     <NextCollectionDate>11/04/2019</NextCollectionDate>
                  </SiteService>
                  <RRASSContractRounds>
                     <RRASSContractRound>                                                                          
                        <RoundCodeOnly>REC3</RoundCodeOnly>
                        <DefaultDeviceType>STREET</DefaultDeviceType>
                     </RRASSContractRound>
                  </RRASSContractRounds>
               </ApiSiteServiceWithExtraDetails>                              
            </SiteServices>
         </GetFullSiteCollectionsResult>
      </GetFullSiteCollectionsResponse>
   </soap:Body>
</soap:Envelope>

1 Ответ

0 голосов
/ 03 апреля 2019

XSLT 1.0 не имеет понятия дат.Вы должны рассматривать это как (простую) проблему в манипулировании текстом:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ws="http://webservices.whitespacews.com/"
exclude-result-prefixes="ws">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="ws:NextCollectionDate">
    <xsl:copy>
        <xsl:value-of select="substring(., 9, 2)"/>
        <xsl:text>/</xsl:text>
        <xsl:value-of select="substring(., 6, 2)"/>
        <xsl:text>/</xsl:text>
        <xsl:value-of select="substring(., 1, 4)"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>
...