Почему я получаю другой вывод с запущенным xslt? - PullRequest
1 голос
/ 30 декабря 2011

Я делаю очень простой xslt для исходного узла, например:

  <p>
        <media type="photo" id="lr002662" rights="licensed">
            <title>Logging in Canada</title>
        </media>Logging is cutting down trees for <definition>
            <word-term>lumber</word-term>
            <word-definition>wood</word-definition>
        </definition>. Loggers are also called <i>lumberjacks.</i>
    </p>

Я запускаю этот исходный узел в моей таблице стилей xslt, однажды в xmlspy я получил следующий вывод:

 <para>
        <media type="photo" source="lr002662" rights="licensed">
            <resource.title>Logging in Canada</resource.title>
        </media>Logging is cutting down trees for <italic>lumber</italic> (wood). Loggers are also called <italic>lumberjacks.</italic>
    </para>

Но затем я запускаю это в командной строке с файлом saxon9he.jar, используя ту же таблицу стилей xslt, я получил следующее:

      <para>
        <media type="photo" source="lr002662" rights="licensed">
            <resource.title>Logging in Canada</resource.title>
        </media>Logging is cutting down trees for 
            <italic>lumber</italic>
             (wood)
        . Loggers are also called <italic>lumberjacks.</italic>
    </para>

Как видите, текст после тега media теперьсодержит так много возвратов каретки, и это не то, что я хочу.Я использовал XMLSpy, поэтому никогда не замечал этой проблемы.Могут ли какие-либо эксперты предложить способ отладки или предоставления моего xslt?

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

Различия связаны с способом, которым Altova XML-процессор обрабатывает пробелы в смешанном контенте.

Пробелы в XML-документе

По умолчанию механизм Altova XSLT 2.0 удаляет все граничные пробелы из узлов с граничными пробелами в исходном XML-документе.Удаление этого пробела влияет на значения, которые возвращают функции fn:position(), fn:last(), fn:count() и fn:deep-equal().Для получения дополнительной информации см. Узлы только для пробелов в документе XML в разделе Функции XPath 2.0 и XQuery 1.0.

AltovaXML разделяет текстовые узлы "border-whitespace" между элементами, которыеиметь содержимое только для пробелов:

Текстовый узел только для границ - это дочерний текстовый узел только для пробелов, который находится между двумя элементами в элементе смешанного содержимого.

Как сказал в своем ответе lwburk, вы можете указать другим процессорам сделать то же самое, добавив в таблицу стилей следующее:

<xsl:strip-space elements="*"/>

Однако вы не можете заставить AltovaXML сохранитьпробелы , потому что они не реализованы xsl:preserve-space или xsl:strip-space и всегда будут их удалять.

1 голос
/ 30 декабря 2011

В источнике есть разрывы строк, поэтому я ожидаю, что они появятся в выходных данных преобразования, если они не были специально удалены. Вы можете вырезать все текстовые узлы только для пробелов, используя:

<xsl:strip-space elements="*"/>

Это должно быть на верхнем уровне вашей таблицы стилей (как дочерний элемент корневого xsl:stylesheet элемента).

...