2017-06-12 11 views
1

かなり標準的なXSLT変換を行っています。出力以下MSXMLとタグ間の空白を使用したXSL変換

<?xml version="1.0" encoding="UTF-8"?> 
<ProgramSchedules mediaCompanyID="00001" date="2017-06-08" channel="00019"> 
<Schedules> 
<Schedule contentId="T17ADiamond008P2AA" startTime="06:29:56" endTime="06:30:11" rerun="true" eventType="AP"> 
</Schedule> 
<Schedule contentId="T17AOslo-Sk236s1AA" startTime="06:30:11" endTime="06:30:31" rerun="true" eventType="AP"> 
</Schedule> 

はMSXML 4とサクソンのショー::(酸素XMLエディタで)MSXMLを使用している場合、私は次のような出力を得る

<?xml version="1.0" encoding="UTF-8"?> 
<ProgramSchedules mediaCompanyID="00001" date="2017-06-08" channel="00019"> 
<Schedules> 
<Schedule contentId="T17ADiamond008P2AA" startTime="06:29:56" endTime="06:30:11" rerun="true" eventType="AP"></Schedule> 
<Schedule contentId="T17AOslo-Sk236s1AA" startTime="06:30:11" endTime="06:30:31" rerun="true" eventType="AP"></Schedule> 

をここでの問題は、私のXMLスキーマは、最初に検証しないことですオープンタグの後にCRLFが存在するため、出力されません。

プロセッサを変更せずにこれを解決する方法はありますか?

ここに私のスタイルシートは次のようになります。

<?xml version='1.0'?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/"> 
     <ProgramSchedules> 
      <xsl:attribute name="mediaCompanyID"> 
       <xsl:text>00001</xsl:text> 
      </xsl:attribute> 
      <xsl:attribute name="date"> 
       <xsl:apply-templates select="txevents/search-criteria/dateselection/ES_DATESELECTION/firstvalue/ESP_DATE"/> 
      </xsl:attribute> 
      <xsl:attribute name="channel"> 
       <xsl:choose> 
        <xsl:when test="starts-with(txevents/ES_BMTXEVENT/channel/ESP_CHANNEL/@name, 'NRK1')"> 
         <xsl:text>00019</xsl:text> 
        </xsl:when> 
        <xsl:when test="txevents/ES_BMTXEVENT/channel/ESP_CHANNEL/@name = 'NRK2'"> 
         <xsl:text>00029</xsl:text> 
        </xsl:when> 
        <xsl:when 
         test="txevents/ES_BMTXEVENT/channel/ESP_CHANNEL/@name = 'NRK3' or txevents/ES_BMTXEVENT/channel/ESP_CHANNEL/@name = 'SUPER'"> 
         <xsl:text>00039</xsl:text> 
        </xsl:when> 
        <xsl:otherwise> 
         <xsl:text>0</xsl:text> 
        </xsl:otherwise> 
       </xsl:choose> 
      </xsl:attribute> 
      <Schedules> 
       <xsl:for-each select="txevents/ES_BMTXEVENT"> 
        <Schedule> 
         <xsl:attribute name="contentId"> 
          <xsl:value-of select="translate(@productcode, '/', '')"/> 
          <xsl:value-of select="substring(transmission/ES_TRANSMISSION/@productVersionAsString, 2, 4)"/> 
         </xsl:attribute> 
         <xsl:attribute name="startTime"> 
          <xsl:apply-templates select="starttime/ESP_TIMEDURATION"/> 
         </xsl:attribute> 
         <xsl:attribute name="endTime"> 
          <xsl:apply-templates select="endtime/ESP_TIMEDURATION"/> 
         </xsl:attribute> 
         <xsl:attribute name="rerun"> 
          <xsl:choose> 
           <xsl:when 
            test="(transmission/ES_TRANSMISSION/@tx_isrepeat = 'true') or (transmission/ES_TRANSMISSION/@tx_isrerun = 'true')"> 
            <xsl:text>true</xsl:text> 
           </xsl:when> 
           <xsl:otherwise> 
            <xsl:text>false</xsl:text> 
           </xsl:otherwise> 
          </xsl:choose> 
         </xsl:attribute> 
         <xsl:attribute name="eventType"> 
          <xsl:choose> 
           <xsl:when 
            test="timeallocation/ES_BMTIMEALLOCATION/type/ESP_BMTIMEALLOCATIONTYPE/@name = 'Segment of program'"> 
            <xsl:text>RP</xsl:text> 
           </xsl:when> 
           <xsl:when test="timeallocation/ES_BMTIMEALLOCATION/type/ESP_BMTIMEALLOCATIONTYPE/@name = 'Trailer'"> 
            <xsl:text>AP</xsl:text> 
           </xsl:when> 
           <xsl:when test="timeallocation/ES_BMTIMEALLOCATION/type/ESP_BMTIMEALLOCATIONTYPE/@name = 'Sting/Vignett'"> 
            <xsl:text>RP</xsl:text> 
           </xsl:when> 
           <xsl:when 
            test="timeallocation/ES_BMTIMEALLOCATION/type/ESP_BMTIMEALLOCATIONTYPE/@name = 'Klokke NRK1 m/ tekst'"> 
            <xsl:text>IF</xsl:text> 
           </xsl:when> 
           <xsl:when test="timeallocation/ES_BMTIMEALLOCATION/type/ESP_BMTIMEALLOCATIONTYPE/@name = 'Klokke NRK Super'"> 
            <xsl:text>IF</xsl:text> 
           </xsl:when> 
           <xsl:when test="timeallocation/ES_BMTIMEALLOCATION/type/ESP_BMTIMEALLOCATIONTYPE/@name = 'Klokke NRK2'"> 
            <xsl:text>IF</xsl:text> 
           </xsl:when> 
           <xsl:when test="timeallocation/ES_BMTIMEALLOCATION/type/ESP_BMTIMEALLOCATIONTYPE/@name = 'Plakater 3'"> 
            <xsl:text>IF</xsl:text> 
           </xsl:when> 
           <xsl:when test="timeallocation/ES_BMTIMEALLOCATION/type/ESP_BMTIMEALLOCATIONTYPE/@name = 'A1 fl on'"> 
            <xsl:text>AP</xsl:text> 
           </xsl:when> 
           <xsl:when test="timeallocation/ES_BMTIMEALLOCATION/type/ESP_BMTIMEALLOCATIONTYPE/@name = 'Sponsor'"> 
            <xsl:text>BR</xsl:text> 
           </xsl:when> 
           <xsl:when test="timeallocation/ES_BMTIMEALLOCATION/type/ESP_BMTIMEALLOCATIONTYPE/@name = 'TTV-rulle NRK1'"> 
            <xsl:text>IF</xsl:text> 
           </xsl:when> 
           <xsl:when test="timeallocation/ES_BMTIMEALLOCATION/type/ESP_BMTIMEALLOCATIONTYPE/@name = 'TTV-rulle NRK2'"> 
            <xsl:text>IF</xsl:text> 
           </xsl:when> 
           <xsl:otherwise> 
            <xsl:text>US</xsl:text> 
           </xsl:otherwise> 
          </xsl:choose> 
         </xsl:attribute></Schedule> 
       </xsl:for-each> 
      </Schedules> 
     </ProgramSchedules> 
    </xsl:template> 

    <xsl:template match="ESP_TIMEDURATION"> 
     <xsl:value-of select="format-number(@hours, '00')"/> 
     <xsl:text>:</xsl:text> 
     <xsl:value-of select="format-number(@minutes, '00')"/> 
     <xsl:text>:</xsl:text> 
     <xsl:value-of select="format-number(@seconds, '00')"/> 
    </xsl:template> 

    <xsl:template match="ESP_DATE"> 
     <xsl:value-of select="@year"/> 
     <xsl:text>-</xsl:text> 
     <xsl:value-of select="format-number(@month, '00')"/> 
     <xsl:text>-</xsl:text> 
     <xsl:value-of select="format-number(@day, '00')"/> 
    </xsl:template> 
    <xsl:template match="ESP_TIMEINSTANT"> 
     <xsl:value-of select="@year"/> 
     <xsl:text>-</xsl:text> 
     <xsl:value-of select="format-number(@month, '00')"/> 
     <xsl:text>-</xsl:text> 
     <xsl:value-of select="format-number(@day, '00')"/> 
    </xsl:template> 

</xsl:stylesheet> 

生のXMLデータはここにある:https://pastebin.com/RWGEi59c

+1

この場合、入力XMLも表示できますか?ありがとうございました! –

+0

入力データが追加されました – wasmachien

答えて

2

酸素のXML v17.1での実験のビットは、あなたのXSLで簡単な変更を取り除くことができることを示しその厄介な改行の。あなたのXSLコードの行31に

、あなたは改行に続いて、<Schedule>要素を挿入するための単一の命令を持って、そしてライン32:

   <Schedule> 
        <xsl:attribute name="contentId"> 

ので、31行の末尾に改行を削除します

   <Schedule><xsl:attribute name="contentId"> 

理論的に、これは機能的に等価でなければならないが、古いMSXMLバージョンはビット特有であると思われる。そのライン31とライン32は、この代わりに見えるように組み合わされます。

関連する問題