Как я могу предоставить ту же форму 1) Бланк и 2) Заполненный через XSLT? - PullRequest
1 голос
/ 06 апреля 2009

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

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

Мне нужно 2 функции:

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

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

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

Спасибо

Ответы [ 2 ]

1 голос
/ 06 апреля 2009

Чтобы создать заготовки соответствующей длины, вы можете:

<!-- 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 голосов
/ 06 апреля 2009

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

<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-документ, и таблица стилей распечатает его таким образом.

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