Xml XSLT:如果值存在,则添加逗号

Xml XSLT:如果值存在,则添加逗号,xml,xslt,Xml,Xslt,我对XML和XSLT非常陌生。我有一个家庭作业,要求我们根据一些XML数据生成一个页面。这很简单,所以这里是: 我的XML数据如下所示: <convention> <title>ABC Web Development Conference</title> <location>ABC College, San Diego, CA</location> <date> March 25, 2011 - Ma

我对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>

ABC网络开发会议
加利福尼亚州圣地亚哥ABC学院
2011年3月25日至2011年3月27日
约翰·史密斯
第二大道1234号
圣地亚哥
加利福尼亚州
john@john.com
网络开发
软件设计
史密斯任務
第一大道1234号
Ste 123
圣地亚哥
加利福尼亚州
jane@jane.com
网络开发
基本上,我已经将其设置为很好地输出到表中。当我输出地址2时,我的问题出现了。我希望这样,如果address2的字符串长度大于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>

参展商
地址
专业化

, ,
参展商总数:

非常感谢您的帮助:)

使用
xsl:if
。你的作业做得很好。再见。

你有教材吗?我将给您一些提示,帮助您查找所需信息:

  • XSL支持条件语句(提示:
    XSL:if
  • 使用特定的XPath函数,可以检查字符串的长度(提示:)
如果您不熟悉这些概念,我建议您从课程材料中查找更多信息


祝你好运

与目前的答案相反,没有必要使用显式XSLT条件指令:

<xsl:apply-templates select="address2"/>
<xsl:template match="address2[normalize-space()]">
  <xsl:value-of select="concat(', ', .)"/>
</xsl:template>
使用

<xsl:apply-templates select="address2"/>
<xsl:template match="address2[normalize-space()]">
  <xsl:value-of select="concat(', ', .)"/>
</xsl:template>

并在XSLT样式表中包含此模板

<xsl:apply-templates select="address2"/>
<xsl:template match="address2[normalize-space()]">
  <xsl:value-of select="concat(', ', .)"/>
</xsl:template>


@lwburk:谢谢!你好像忘了+1?正是+1获取更惯用的解决方案(另一个+1在哪里?@jsalonen:不客气。我想说,不是更地道,而是“更规范”。