#java #xml #xslt
#java #xml #xslt
Вопрос:
Я работаю с проектом CV, используя XML для хранения резюме, используя 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 и так далее. Нравится-
<p>Job No1</p>
<p>Job No2</p>
Я использовал следующее — с ошибкой получить требуемый результат..
<xsl:for-each select="Job">
<p style="color:red">
<xsl:if test="position() amp;> 1">,</xsl:if>
<xsl:value-of select="."/>
</p>
</xsl:for-each>
Используя приведенный выше код, я получаю вывод, подобный —
<p>Job No1 job No2..</p>
Я использую XSLT 1.0, о котором я упоминал, чтобы забыть в первом сообщении. Извините за это, но вы судили об этом .. Хммм, огромный опыт работы с XSLT .. Отлично..
Можете ли вы мне снова помочь ..?
Хорошего дня, Джон
Ларш — Правильно сказал, я должен был сделать все это в самом первом сообщении, но почему-то не могу с этим справиться. Теперь я практиковал методы публикации и в дальнейшем буду делать это правильно. 🙂
Кроме того, я принял ответ Мартина. Это сделало свое дело, с небольшими изменениями я получил ответ на 2-й мой пост.
Большое спасибо всем вам…
Хорошего дня, Джон
Комментарии:
1. Вопрос слишком расплывчатый, чтобы попытаться дать полезный ответ. Пожалуйста, покажите ваш текущий код XSLT. (Я думаю, вы достаточно ясно дали понять, какой результат вам нужен и какой результат вы получаете в данный момент.)
2. @LarsH: он есть, но не отформатирован. В OP говорится: «Как правильно отображать
<job>
повторяющиеся теги?» но<job>
он не отформатирован так, как должен. Я предполагаю, что @Martin Honnen мог отредактировать вопрос. Я делаю это сейчас.3. @Dimitre: наличие
<job>
видимого помогает, но я спрашивал его код XSLT.4. @LarsH: всякий раз, когда кто-то говорит, что они получают только 1-й узел, это почти на 100%
<xsl:value-of>
против<xsl:copy-of>
🙂5. @Dimitre: да. Я просто подумал, что было бы проще исправить проблему с учетом специфики, основанной на контексте его кода, вместо того, чтобы тратить время на общие объяснения, которые ему может быть трудно применить — или вообще не могут быть применимы, если его проблема более тонкая. В принципе, я чувствую, что это базовый уровень рассмотрения, когда спрашивают «Что не так с моим кодом?», Чтобы показать некоторый код. Я думаю, это подтверждается новым ответом Джона, что ответ Мартина не совсем применим к его коду … который он сейчас показывает.
Ответ №1:
Я думаю, проблема в том, что с 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() amp;> 1">, </xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
или <xsl:apply-templates select="job"/>
с шаблоном для элементов задания, например
<xsl:template match="job">
<xsl:if test="position() amp;> 1">, </xsl:if>
<xsl:value-of select="."/>
<xsl:template>
в то время как с XSLT 2.0 все, что вам нужно, это <xsl:value-of select="job" separator=", "/>
.
Комментарии:
1. Хорошая работа, чтобы выяснить, что имел в виду пользователь … 1