2013-10-03 5 views
0

Я использую Saxon HE 9.5 в качестве своего XSLT-процессора. Поскольку источником является XML большого размера, мне нужно минимизировать размер вывода. Однако использование Saxon HE будет добавлять разрывы строк между тегами элементов. Такие, как в следующем примере:Saxon проблема разрыва строки в выходе XML

<Element1> 
    <attr1> 
    test1 
    </attr1> 
</Element1> 

Я хочу, чтобы это было как:

<Element1> <attr1> test1 </attr1> </Element1> 

так, что я могу уменьшить размер выходного XML. Есть ли способ сделать это? Я попытался установить indent = "no", но выходной XML не открывается. Спасибо!

ответ

2

Вы можете использовать <xsl:output indent="no"/>, чтобы отключить отступ, но ваша строка разбивается на элементы, содержащие текст, который все еще будет там (даже с <xsl:strip-space elements="*"/>). Вы можете использовать normalize-space(), чтобы удалить их.

Пример ...

XML Input

<Element1> 
    <attr1> 
     test1 
    </attr1> 
</Element1> 

XSLT 2.0 (работает как 1,0 тоже)

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="no"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="@*|*|processing-instruction()|comment()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="text()"> 
     <xsl:value-of select="normalize-space(.)"/> 
    </xsl:template> 

</xsl:stylesheet> 

XML Output

<Element1><attr1>test1</attr1></Element1> 
+0

Я пробовал преобразование XSLT на выходе XML из саксонского процессора. Однако я все еще не могу открыть приведенный XML. Спасибо. – user2051823

+0

@ user2051823 - Почему вы не можете открыть файл? Есть ли ошибка? –

1

Опция indent = "no" является значением по умолчанию. Если вы получаете вывод с отступом, то либо (a) вы запросили его, используя indent = «yes», либо (b) пробелы присутствуют в дереве результатов перед сериализацией. Если пробелы присутствуют в дереве результатов, то либо (b1) таблица стилей добавила его в результирующее дерево, либо (b2) была скопирована из исходного документа. Если (b2) является причиной, то размещение <xsl:strip-space elements="*"/> в вашей таблице стилей может быть ответом (если у вас нет значительного пробела в исходном документе, который необходимо сохранить).

Мы не можем давать ничего, кроме общих советов, если вы не покажете нам свой код.

+0

Я не уверен, проблема с таблицей стилей или исходным документом, но если я использую другой процессор XSLT, проблема с разрывом строки не существует. Вот настройки для моего XSLT: \t И для XML, Спасибо! – user2051823

+0

Повторяю: я не могу отлаживать код, который я не вижу. –

+0

Если «другой XSLT-процессор» использует синтаксический анализатор Microsoft XML, то, скорее всего, вы полагаетесь на его нестандартное поведение при удалении пространства - если это так, тогда ' 'должен решить эту проблему. –

Смежные вопросы