Отображать повторяющиеся теги в XSLT? - PullRequest
1 голос
/ 10 октября 2011

Я работаю с проектом CV, используя XML для хранения CV, используя XSLT и Java для преобразования его в HTML.

Ниже приведен формат файла XML

<CVs>
<cv>
<name>...</name>
<dob>...</dob>
<experience>
<job>.....</job>
<job>.....</job>
</experience>
</cv>
<cv>
<name>...</name>
<dob>...</dob>
<experience>
<job>.....</job>
<job>.....</job>
<job>.....</job>
<job>.....</job>
<job>.....</job>
</experience>
</cv>
</CVs>

Что такоеправильный способ многократно отображать <job>?Я получаю только один <job> и этот первый ...

Хорошего дня, Джон


Большое спасибо за ваш ответ.:)

Я попробовал первое решение.Оно работает.Но то, что я хочу, это отобразить все с форматированием абзаца HTML.

Сначала отобразите № 1, затем должен быть абзац, затем № 2 и так далее.like-

<p>Job No1</p>
<p>Job No2</p>

Я использовал следующее - при невозможности получить требуемый результат ..

<xsl:for-each select="Job">
<p style="color:red">
<xsl:if test="position() &gt; 1">,</xsl:if>
<xsl:value-of select="."/>
</p>
</xsl:for-each> 

Используя приведенный выше код, я получаю вывод вроде -

<p>Job No1 job No2..</p>

Я использую XSLT 1.0, о котором я упоминаю, чтобы забыть в первом посте.Извините за это, но вы судили об этом ... Хм, огромный опыт работы с XSLT .. Отлично ..

Можете ли вы помочь мне снова?*

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

Кроме того, я принял ответ Мартина.Он сделал свою работу, с небольшими изменениями я получил ответ на 2-й мой пост.

Большое спасибо всем вам ...

Хорошего дня, Джон

1 Ответ

1 голос
/ 10 октября 2011

Полагаю, проблема в том, что с XSLT 1.0 (или с процессором XSLT 2.0, работающим с таблицей стилей XSLT 1.0 в режиме обратной совместимости) код

<xsl:value-of select="job"/>

выводит строковое значение первого элемента задания.Если вы хотите вывести значение всех элементов задания, тогда с XSLT 1.0 вам нужно использовать либо

<xsl:for-each select="job">
  <xsl:if test="position() &gt; 1">, </xsl:if>
  <xsl:value-of select="."/>
</xsl:for-each>

, либо <xsl:apply-templates select="job"/> с шаблоном для элементов задания, например,

<xsl:template match="job">
  <xsl:if test="position() &gt; 1">, </xsl:if>
  <xsl:value-of select="."/>
<xsl:template>

, в то время какс XSLT 2.0 все что вам нужно это <xsl:value-of select="job" separator=", "/>.

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