2012-05-29 1 views
2

Я преобразовываю XML в XML и хочу автоматически отступать результат.
Так что я использую <xsl:output method="xml" indent="yes"/>
При выполнении этого с помощью скомпилированного преобразования .net4 он работает хорошо, пока на выходе нет текстового узла.
Когда я добавляю текст <xsl:text>some text</xsl:text> отступы всего файла XML ушли и результат XML состоит из нескольких очень длинных строк вместо (хорошо сформирован, но нечитаемый ...)Отступ и текстовые узлы при преобразованиях xslt с .net

Пример:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
    <Root> 
     <!--xsl:text>some test</xsl:text--> 
     <Test1/> 
     <Test2/> 
    </Root> 
    </xsl:template> 

</xsl:stylesheet> 

Результат:

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <Test1 /> 
    <Test2 /> 
</Root> 

Результат при удалении комментария от <xsl:text>some test</xsl:text>:

<?xml version="1.0" encoding="utf-8"?> 
<Root>some test<Test1 /><Test2 /></Root> 

Любые идеи?

+1

Я просто пробовал это, и он отлично работал - не могли бы вы показать пример, где вы добавляете текст? – Filburt

+0

@Filburt Вы попробовали это с .net (4) скомпилированным преобразованием? Я знаю, что другие процессоры xslt ведут себя по-другому. –

+0

Да, я использовал .Net 4.0 и 'XslCompiledTransform'. – Filburt

ответ

2

отступов в указанный с:

<xsl:output indent="yes"/> 

affects only the treatment of white-space-only nodes.

Всякий раз, когда вы указываете текстовые узлы, не содержащие пробелы, вы должны предоставить им свой собственный отступы - самостоятельно.

+0

Насколько я понимаю, для узла '' не будет влиять отступ, но почему добавление текстового узла влияет на все другие нетекстовые узлы? Я не мог видеть в Рекомендации XSLT 1.0 W3C что-либо, что объясняет это, кроме как «_It обычно небезопасно использовать indent =« yes »с типами документов, которые включают типы элементов со смешанным контентом.» (Что на самом деле не говорит что должно произойти в этом случае) –

+0

@AmirGonnen: цитируемый текст из Рекомендации XSLT 1.0 W3C четко говорит, что это «небезопасно» - это то же самое, что сказать «не указано, что произойдет» или «непредсказуемо» - - именно то, что вы стали свидетелями. –

+0

Вы сказали _ Когда бы вы не указали текстовые узлы, не содержащие пробелы, вы должны указать им свой собственный indenting_. Проблема в том, что я должен предоставить свой собственный отступы не только для текстовых узлов, не содержащих пробелы, но также для ** xml-узлов **, которые являются братьями и сестрами текстовых узлов. Предположим, что все, что я хочу сделать, это добавить новую строку между двумя узлами xml. Это означает, что мне нужно предоставить свой собственный отступ для всех узлов xml, которые являются братьями и сестрами в новой строке ... Вы знаете способ смягчения этого? (в настоящее время моим единственным решением является добавление в него узла комментариев и новой строки, что не очень чисто) –

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

  • Нет связанных вопросов^_^