Ограничить вывод элемента XSLT до 2000 символов - PullRequest
0 голосов
/ 24 января 2012

Я хочу ограничить вывод элемента XSLT до 2000 символов.Элемент имеет много условий IF, и в зависимости от того, какие условия выполняются, отображаются подэлементы.Я не могу использовать функцию concat (), так как переменная повторно инициализируется в каждом блоке IF.Я не могу использовать substring (), так как есть много подэлементов, и я хочу, чтобы конкатенация всех подэлементов составляла 2000 символов.В настоящее время я работаю над опцией javascript, но без особой удачи.Я новичок в XSLT, поэтому любая помощь очень ценится.

Спасибо, Клейтон

Ответы [ 3 ]

1 голос
/ 24 января 2012

Не подойдет ли этот подход.Выполните преобразование так, как вам требуется, но оставьте результат в переменной, а не в выходном документе.Затем поместите подстроку этого в вывод

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

<xsl:variable name="normalResult">
    <!-- Put your basic transform code here -->
</xsl:variable>

<xsl:template match="/">
    <TrimmedResult>
        <xsl:value-of select="substring($normalResult, 1, 2000)"/>
    </TrimmedResult>
</xsl:template>

</xsl:stylesheet>
0 голосов
/ 24 января 2012

И Грег, и Кеван привели вам примеры правильного дизайна: выполните первое преобразование без усечения, затем выполните усечение во втором преобразовании.

Единственный знак вопроса над этим - производительность. Если первое преобразование будет генерировать 50 МБ вывода, а вам нужны только первые 50 КБ, это неэффективный подход. Если это вообще возможно, перепишите требования, чтобы выразить их в терминах размера входных данных, а не размера выходных данных. Если вы не можете этого сделать, и если двухфазный подход слишком расточителен, то единственное решение, которое я могу придумать, - это внедрить некоторые функции расширения с отслеживанием состояния, которые отслеживают объем производимой продукции и позволяют вам задавать вопрос, является ли ограничение был превышен. Детали будут зависеть от вашего выбора процессора.

0 голосов
/ 24 января 2012

Маловероятно, что вы сможете сделать это в чистом XSLT хорошим способом. Вместо этого я бы порекомендовал написать другую программу, которая запускается после преобразования XSLT и усекает любые длинные элементы в результирующем XML до 2000 символов.

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