(1) Почему Option1 (Template) создает пробелы (в основном btw rec1 & 5), тогда как Option2 (ForEach) нет?
(2) Если возможно, как код Option1 удалить удаляемые пробелы?
Предположения: использование XSLT v1., XMLPad/Stylus для тестирования, MSXML4.
Работа над обработкой больших и сложных XML-входных файлов (сочетание элементов/атрибутов) с несколькими критериями выбора типа для создания нескольких выходных файлов TSV. Несколько ссылок, по-видимому, указывают на использование шаблонов в качестве предпочтительного метода. Использование совпадения в настоящее время вызывает слишком много пробелов в очереди сообщений.XSLT - XML to CSV - шаблон vs. для каждого - удаление пробелов
XML:
<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>
XSL:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="tab" select="'	'" />
<xsl:template match="@*|text()"/>
<xsl:template match="/">
<xsl:text/>event<xsl:value-of select="$tab"/>
<xsl:text/>date<xsl:value-of select="$tab"/>
<xsl:apply-templates/>
</xsl:template>
<!-- OPTION1 -->
<xsl:template match="event[event_type='Bike']"><xsl:text>
</xsl:text>
<xsl:value-of select="event_type"/><xsl:value-of select="$tab"/>
<xsl:value-of select="date"/>
</xsl:template>
<!-- OPTION2 -->
<!--<xsl:template match="@*|node()">
<xsl:for-each select="event[event_type='Bike']"><xsl:text>
</xsl:text>
<xsl:value-of select="event_type"/><xsl:value-of select="$tab"/>
<xsl:value-of select="date"/>
</xsl:for-each>
</xsl:template>-->
</xsl:stylesheet>
Выход - Opt1 Шаблон (не можете фото пока ... есть пробелы)
мероприятие ... дата ......
Bike .... 2012-02-05 ............
Bike .... 2012-02-09.
Выход - Opt2 ForEach
событие ... дата .....
велосипед .... 2012-02-05
велосипед .... 2012-02-09
Я попробовал ваш пример в VS 2010 XML/XSLT редактор и он работает, как ожидается, либо вариант, не было добавлено никаких дополнительных пробельных символов. Может быть XMLPad/Stylus или MSXML4, который добавляет дополнительные пробелы? –
ваше решение работает в VS 2010, я подтвердил ваш ответ. –
@dradu: Спасибо, я думал, что вы OP :) –