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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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
XSLT-XML到CSV-template vs.for each-删除空白_Xml_Xslt_Csv - Fatal编程技术网

XSLT-XML到CSV-template vs.for each-删除空白

XSLT-XML到CSV-template vs.for each-删除空白,xml,xslt,csv,Xml,Xslt,Csv,(1) 为什么Option1(模板)产生空白(主要是btw rec1和5),而Option2(ForEach)不产生空白(2)如果可能,如何对选项1进行编码以删除生成的空白? 假设:使用XSLT v1.,XMLPad/手写笔进行测试,MSXML4. 使用多个“类型”选择标准处理更大、更复杂的XML输入文件(元素/属性的混合),以创建多个TSV输出文件。许多参考文献似乎表明使用模板作为首选方法。使用match当前会将过多的空白推送到消息队列中 XML: 自行车 2012-02-05 跑 2012

(1) 为什么Option1(模板)产生空白(主要是btw rec1和5),而Option2(ForEach)不产生空白
(2)如果可能,如何对选项1进行编码以删除生成的空白?
假设:使用XSLT v1.,XMLPad/手写笔进行测试,MSXML4.
使用多个“类型”选择标准处理更大、更复杂的XML输入文件(元素/属性的混合),以创建多个TSV输出文件。许多参考文献似乎表明使用模板作为首选方法。使用match当前会将过多的空白推送到消息队列中

XML:


自行车
2012-02-05
跑
2012-02-06
游
2012-02-07
跑
2012-02-08
自行车
2012-02-09
XSL:


事件
日期
输出-Opt1模板(还不能发布图片,…是空白)

事件……日期……
自行车…2012-02-05 自行车…2012-02-09。

输出-opt2foreach

事件…日期…
自行车……2012-02-05

自行车…2012-02-09你想要这个吗

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

    <xsl:variable name="vTab" select="'&#09;'" />
    <xsl:variable name="vNL" select="'&#10;'" />

    <xsl:template match="@*|text()"/>

    <xsl:template match="/*">
        <xsl:value-of select=
        "concat(' event', $vTab, 'date', $vTab, $vNL)"/>
        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="event[event_type='Bike']">
      <xsl:value-of select=
        "concat(' ', event_type, $vTab, date, $vNL)"/>
    </xsl:template>
</xsl:stylesheet>

我尝试了一个不同的编辑器(Architag XRay Xml编辑器,它使用MSXML),为了使它工作,我必须使用CR/LF字符。我相信迪米特里的回答是正确的。 这是我的修改:

<!-- OPTION1 -->
<xsl:template match="event[event_type='Bike']">
<xsl:text>&#13;&#10;</xsl:text>
<xsl:value-of select="event_type"/><xsl:value-of select="$tab"/>
<xsl:value-of select="date"/>
</xsl:template>




我在VS 2010 Xml/Xslt编辑器中尝试了您的示例,无论使用哪种选项,它都能正常工作,没有添加额外的空格。可能是XMLPad/Stylus或MSXML4添加了额外的空格?您的解决方案在VS 2010中有效,我已经对您的答案进行了投票。@dradu:谢谢,我以为您是OP:)@marcus:我的解决方案在您的环境中不起作用吗?dradu,dimitri:在第2季度都正确,在第1季度正确(XMLPad v3创建空格,已卸载)。我是新来的,打破了多个q的规则。从Dimitri那里学到了更干净的语法,我想把两者都投上一票,谢谢。FWIW-使用模板处理我的原始工作文件w/StylusStudio~320ms,使用ForEach~305ms。
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

    <xsl:variable name="vTab" select="'&#09;'" />
    <xsl:variable name="vNL" select="'&#10;'" />

    <xsl:template match="@*|text()"/>

    <xsl:template match="/*">
        <xsl:value-of select=
        "concat(' event', $vTab, 'date', $vTab, $vNL)"/>
        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="event[event_type='Bike']">
      <xsl:value-of select=
        "concat(' ', event_type, $vTab, date, $vNL)"/>
    </xsl:template>
</xsl:stylesheet>
<main>
    <event>
        <event_type>Bike</event_type>
        <date>2012-02-05</date>
    </event>
    <event>
        <event_type>Run</event_type>
        <date>2012-02-06</date>
    </event>
    <event>
        <event_type>Swim</event_type>
        <date>2012-02-07</date>
    </event>
    <event>
        <event_type>Run</event_type>
        <date>2012-02-08</date>
    </event>
    <event>
        <event_type>Bike</event_type>
        <date>2012-02-09</date>
    </event>
</main>
 event  date    
 Bike   2012-02-05
 Bike   2012-02-09
<!-- OPTION1 -->
<xsl:template match="event[event_type='Bike']">
<xsl:text>&#13;&#10;</xsl:text>
<xsl:value-of select="event_type"/><xsl:value-of select="$tab"/>
<xsl:value-of select="date"/>
</xsl:template>