计算XSLT中可能缺少元素的总数?

时间:2017-10-08 00:21:47

标签: xml xslt

当其中一个学生中不存在一个字段时,我一直在寻找计算总数的方法。当我总结充电器时,我一直在拿NaN。当其中一项指控仅存在于一名学生中时,我如何对充电器求和。只有学生2有活动充电器,但第一个没有。

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="students.xslt"?>

<students>
  <student id="001234" type="grad">
    <lastname>Jones</lastname>
    <firstname>Alan</firstname>
    <gpa>3.51</gpa>
    <chargers>
      <tuition>1200</tuition>
      <parking>35.20</parking>
      <health>18.20</health>
    </chargers>
  </student>
  <student id="001887" type="undergrad">
  <lastname>Chong</lastname>
  <firstname>Susan</firstname>
  <gpa>2.51</gpa>
    <chargers>
      <tuition>1645</tuition>
      <activity>50.20</activity>
      <parking>35.20</parking>
      <health>22.50</health>
    </chargers>
  </student>
</students>

这就是我试图计算总数的方法。 <xsl:value-of select="sum(//chargers) "/>  什么是最好的方法?

是否需要进行xsl:if测试?

<xsl:template match="chargers">
    <table>
      <tr>
        <b>Chargers:</b>
      </tr>
      <tr>
        <td>Tuition:</td>
        <td>
          <xsl:value-of select="tuition"/>
        </td>
      </tr>
      <xsl:if test="self::node()[activity]"> 
      <tr>
        <td>Activity:</td>
        <td>
          <xsl:value-of select="activity"/>
        </td>
      </tr>
      </xsl:if>
      <tr>
        <td>Parking:</td>
        <td>
          <xsl:value-of select="parking"/>
        </td>
      </tr>
      <tr>
        <td>health:</td>
        <td>
          <xsl:value-of select="health"/>
        </td>
      </tr>
      <tr>
        <td colspan="2">Total Chargers:</td>
        <td>
          <xsl:value-of select="sum(//chargers) "/>
        </td>
      </tr>
      </table>
 </xsl:template>

1 个答案:

答案 0 :(得分:0)

第一个问题是$(function(){ $('#create_reservation_form').group(function(){ $('#type').change(function(e){ // do stuff... }); $('#brand').change(function(e){ // do stuff... }); $('#category').change(function(e){ // do stuff... }); }); }); 可能会丢失,而是在您应该选择activity的孩子时选择chargers元素元件。

更改

chargers

      <xsl:value-of select="sum(//chargers) "/>

选择文档中所有 <xsl:value-of select="sum(//chargers/*) "/> 元素的子元素。

第二个问题是,您可能不希望在文档中所有chargers元素中的所有chargers个孩子之间求和。相反,您可能希望将chargers元素子项与您匹配的特定charger元素相加。

如果是,则更改

chargers

      <xsl:value-of select="sum(//chargers/*) "/>
模板中的

<xsl:value-of select="sum(*) "/> 匹配。