2009-04-06 1 views
1

У меня есть 20 форм, которые я печатаю с использованием XML и XSLT. Теперь мне нужна функциональность, где я могу печатать эти формы как пустые. Например, у меня есть поле «Name» в моем XML и соответствующийКак я могу предоставить одну и ту же форму 1) Бланк и 2) Заполнен через XSLT?

<span>Name:</span> 
<strong class="data"> 
    <xsl:value-of disable-output-escaping="yes" select="Name" /> 
</strong> 

мне нужно 2 функциональные возможности:

  1. Я хочу напечатать имя, например: Name: John Doe
  2. Я не хочу напечатать Имя и заполнить, например,: Name:________

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

Есть ли у кого-нибудь идеи, как это можно реализовать?

Благодаря

+0

Интересный вопрос! Вы собираетесь использовать один и тот же XSLT для обоих сценариев или другой для пустой формы? – Cerebrus

+0

Да, я не хочу снова воссоздать xslt. – Mithil

+0

Означает ли это, что вы хотите иметь дополнительный шаблон, который преобразует вывод, который у вас уже есть, добавив пробелы там, где они отсутствуют? – Tomalak

ответ

0

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

<span>Name:</span> 
<strong class="data"> 
    <xsl:choose> 
     <xsl:when test="string-length(Name) > 0"> 
      <xsl:value-of disable-output-escaping="yes" select="Name" /> 
     </xsl:when> 
     <xsl:otherwise> 
      _____________________________ 
     </xsl:otherwise> 
    </xsl:choose> 
</strong> 

Таким образом, вы просто передать в пустой документ XML, и таблица стилей печати как таковой.

+0

Спасибо за ответ, но я не хочу проходить через все мои xslts (есть около 80 нечетных) и внести это изменение. Плюс, если есть текстовая область, тогда мне нужно несколько строк. – Mithil

1

Для создания заготовок нужной длины, вы можете:

<!-- make sure you put in more blanks than you'll need --> 
<xsl:variable name="blanks" select="'___[...100 blanks...]___'" /> 

<!-- and later --> 

<xsl:value-of select="substring($blanks, 1, @fieldlength)" /> 

Или

<xsl:template name="create-blanks"> 
    <xsl:param name="todo" select="0" /> 

    <xsl:if test="$todo &gt; 0"> 
    <xsl:text>_</xsl:text> 
    <xsl:call-template name="create-blanks"> 
     <xsl:with-param name="todo" select="$todo - 1" /> 
    </xsl:call-template> 
    </xsl:choose> 
</xsl:template> 

<!-- and later --> 

<xsl:variable name="blanks"> 
    <xsl:call-template name="create-blanks"> 
    <xsl:with-param name="todo" select="@fieldlength" /> 
    </xsl:call-template> 
</xsl:variable> 

<xsl:value-of select="$blanks" /> 

Производительность-мудрый, первый подход, очевидно, следует предпочесть. Последнее может быть несколько улучшено путем создания более одного пустого (например, 10) каждый раз и его вызова не @fieldlength, а ceiling(@fieldlength div 10) раз, используя результат substring(). Этот расчет, конечно, может произойти и в самом шаблоне.

Если разумный максимум заготовок не может быть предварительно определен (что, вероятно, несколько маловероятно для вашего случая), последний метод гарантирует, что вы никогда не сможете «выбежать».

+0

Спасибо за ответ, но я не хочу проходить через все мои xslts (есть около 80 нечетных) и внести это изменение. Плюс, если есть текстовая область, тогда мне нужно несколько строк. – Mithil

+0

Итак, что именно * делать * вы хотите? Как вы хотите изменить выход, если вы не собираетесь менять XSLT? – Tomalak

+0

В основном, что я думал, я создаю пустой xml для всех своих форм, а затем в зависимости от поля каждого поля добавляю соответствующее количество пробелов. Имеет ли это смысл? – Mithil

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

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