Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MSXML和标记之间的空白进行XSL转换_Xml_Xslt_Xsd_Xslt 1.0_Msxml - Fatal编程技术网

使用MSXML和标记之间的空白进行XSL转换

使用MSXML和标记之间的空白进行XSL转换,xml,xslt,xsd,xslt-1.0,msxml,Xml,Xslt,Xsd,Xslt 1.0,Msxml,我正在做一个非常标准的XSLT转换。使用MSXML(在Oxygen XML编辑器中)时,我得到以下输出: <?xml version="1.0" encoding="UTF-8"?> <ProgramSchedules mediaCompanyID="00001" date="2017-06-08" channel="00019"> <Schedules> <Schedule contentId="T17ADiamond008P2AA" startTim

我正在做一个非常标准的XSLT转换。使用MSXML(在Oxygen XML编辑器中)时,我得到以下输出:

<?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 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和Saxon显示以下输出:

<?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 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>

00001
00019
00029
00039
0
真的
假的
反相
美联社
反相
如果
如果
如果
如果
美联社
溴
如果
如果
美国
:
:
-
-
-
-

原始XML数据如下所示:

在OxygenXMLV17.1中进行的一些实验表明,对XSL进行简单的更改就可以消除这一恼人的新行

在XSL代码的第31行,您有一条插入
元素的指令,后面是换行符,第32行:

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

删除第31行末尾的换行符,以便将第31行和第32行合并为如下所示:

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


从理论上讲,这在功能上应该是等效的,但较旧的MSXML版本似乎有点特殊。

在这种情况下,您也可以显示您的输入XML吗?非常感谢。添加的输入数据