XSLT: если значение существует, добавьте запятую - PullRequest
2 голосов
/ 26 ноября 2011

Я очень плохо знаком с XML и XSLT.У меня есть домашнее задание, которое просит нас создать страницу, основанную на некоторых данных XML.Это довольно просто, так что вот так:

Мои XML-данные выглядят так:

<convention>
    <title>ABC Web Development Conference</title>
    <location>ABC College, San Diego, CA</location>
    <date> March 25, 2011 - March 27, 2011</date>
    <exhibitor>
        <name>John Smith</name>
        <address1>1234 2nd Avenue</address1>
        <address2></address2>
        <city>San Diego</city>
        <state>CA</state>
        <email>john@john.com</email>
        <specialization>
            <subject>Web Development</subject>
            <subject>Software Design</subject>
        </specialization>
    </exhibitor>
        <exhibitor>
        <name>Jane Smith</name>
        <address1>1234 First Avenue</address1>
        <address2>Ste 123</address2>
        <city>San Diego</city>
        <state>CA</state>
        <email>jane@jane.com</email>
        <specialization>
            <subject>Web Development</subject>
        </specialization>
    </exhibitor>
</convention>

По сути, я настроил их так, чтобы они красиво выводились в таблицу.Моя проблема возникает, когда я вывожу адрес 2. Я хочу сделать так, чтобы, если длина строки адреса2 была больше 0, выводила запятую.

Вот как выглядят мои данные XSL:

<table width="600" border="1" cellspacing="3" cellpadding="5">
  <tr>
    <td colspan="3" align="center"><xsl:value-of select="convention/title"/></td>
  </tr>
  <tr>
    <td colspan="3" align="center"><xsl:value-of select="convention/location"/></td>
  </tr>
  <tr>
    <td colspan="3" align="center"><xsl:value-of select="convention/date"/></td>
  </tr>
  <tr>
    <th>Exhibitor</th>
    <th>Address</th>
    <th>Specialization</th>
  </tr>
    <xsl:for-each select="convention/exhibitor">
    <tr>
      <td><xsl:value-of select="name"/><br /><xsl:value-of select="email"/></td>
      <td><xsl:value-of select="address1"/>, <xsl:value-of select="address2"/>&nbsp;<xsl:value-of select="city"/>, <xsl:value-of select="state"/></td>
      <td><xsl:for-each select="specialization/subject"><xsl:value-of select="."/><br /></xsl:for-each></td>
    </tr>
    </xsl:for-each>
  <tr>
    <td colspan="3">Total Number of Exhibitors: <xsl:value-of select="count(convention/exhibitor)"/></td>
  </tr>
</table>

Любая помощь очень ценится:)

Ответы [ 3 ]

3 голосов
/ 26 ноября 2011

У вас есть учебник? Я дам вам несколько советов, которые могут помочь вам найти нужную информацию:

  • XSL поддерживает условные операторы (подсказка: xsl:if)
  • С помощью определенной функции XPath вы можете проверить длину строки (подсказка: http://www.w3schools.com/xpath/xpath_functions.asp)

Если вы не знакомы с этими понятиями, я предлагаю вам ознакомиться с дополнительной информацией из вашего курса.

Удачи!

3 голосов
/ 26 ноября 2011

Вопреки ответам до сих пор, не требуется , чтобы использовать явную условную инструкцию XSLT :

Используйте :

<xsl:apply-templates select="address2"/>

и включите этот шаблон в таблицу стилей XSLT :

<xsl:template match="address2[normalize-space()]">
  <xsl:value-of select="concat(', ', .)"/>
</xsl:template>
1 голос
/ 26 ноября 2011

Используйте xsl:if. Хорошо смотри свою домашнюю работу. Bye.

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