Вывести HTML-элементы управления - имя динамического элемента управления - PullRequest
3 голосов
/ 03 декабря 2008

Я бы хотел выводить элементы управления html, используя xslt, но мне нужно иметь возможность именовать элементы управления, чтобы я мог получить их, когда форма отправляет ответ.

Я бы хотел назвать радиокнопку "action_" + _case_id.

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="data.xsl"?>
<NewDataSet>
  <Cases>
    <Case>
      <case_id>30</case_id>
    </Case>
  <Cases>
</NewDataSet>

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
     <div class="your_action">
      Your action:<br />
      <input type="radio" name="?" value="No" checked ="true"/> nothing to report<br />
      <input type="radio" name="?" value="Yes" /> memo to follow
    </div>
  </xsl:template>
</xsl:stylesheet>

Ответы [ 4 ]

3 голосов
/ 03 декабря 2008

Использование: <input type="radio" name="{concat('action_', /*/*/*/case_id)}" value="No" checked ="true"/>

В случае изменения вашего xml-документа может возникнуть необходимость заменить вышеприведенные символы "*" более подробными шагами определения местоположения.

0 голосов
/ 03 декабря 2008

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

  1. NewDataSet_Cases_Case1_case_id1_rb.
  2. NewDataSet_Cases_Case1_case_id2_rb.

Вам просто нужен способ получить имена родительских узлов, что-то вроде:

&lt;xsl:variable name="parent1Name"
              select="name(parent::*)" /&gt;
0 голосов
/ 03 декабря 2008

При ссылке на переменную необходимо указать префикс со знаком $:

<input type="radio" name="{$actionid}" value="No" checked ="true"/> nothing to report<br />
0 голосов
/ 03 декабря 2008
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="data.xsl"?>
<NewDataSet>
  <Cases>
    <Case>
      <case_id>30</case_id>
    </Case>
  <Cases>
</NewDataSet>

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
     <xsl:variable name="actionid">action_<xsl:value-of select="Cases/Case/case_id"/></xsl:variable>
     <div class="your_action">
      Your action:<br />
      <input type="radio" name="{actionid}" value="No" checked ="true"/> nothing to report<br />
      <input type="radio" name="{actionid}" value="Yes" /> memo to follow
    </div>
  </xsl:template>
</xsl:stylesheet>

ПРИМЕЧАНИЕ: не тестировалось. Возможно, вы захотите добавить средство сопоставления специально для узла Case, а не просто для сопоставления с корневым узлом.

...