【发布时间】:2017-08-04 14:24:42
【问题描述】:
我有一个像下面这样的 xml,它有多个节点。我必须遍历每个节点,看看其他节点是否有wd:day_of_week,然后为所有匹配的值添加所有wd:calculated_quatity。
例如对于下面的 xml 有两个 wd:day_of_week 值作为 'Monday' ,那么我们需要将这两个关联的 wd:calculated_quantity 添加为 4.75 + 4.08333。
XML:
<wd:Time_Blocks_for_Worker>
<wd:Day_of_the_Week>Monday</wd:Day_of_the_Week>
<wd:Calendar_Date>2017-07-10-07:00</wd:Calendar_Date>
<wd:Time_Type wd:Descriptor="Hours Worked">
<wd:ID wd:type="WID">da128ce5a1dc103f5656dad4dad70868</wd:ID>
<wd:ID wd:type="Time_Code_Reference_ID">CA Hours Worked In/Out</wd:ID>
</wd:Time_Type>
<wd:Calculated_Quantity>4.75</wd:Calculated_Quantity>
</wd:Time_Blocks_for_Worker>
<wd:Time_Blocks_for_Worker>
<wd:Day_of_the_Week>Monday</wd:Day_of_the_Week>
<wd:Calendar_Date>2017-07-10-07:00</wd:Calendar_Date>
<wd:Time_Type wd:Descriptor="Hours Worked">
<wd:ID wd:type="WID">da128ce5a1dc103f5656dad4dad70868</wd:ID>
<wd:ID wd:type="Time_Code_Reference_ID">CA Hours Worked In/Out</wd:ID>
</wd:Time_Type>
<wd:Calculated_Quantity>4.083333</wd:Calculated_Quantity>
</wd:Time_Blocks_for_Worker>
<wd:Time_Blocks_for_Worker>
<wd:Day_of_the_Week>Tuesday</wd:Day_of_the_Week>
<wd:Calendar_Date>2017-07-11-07:00</wd:Calendar_Date>
<wd:Time_Type wd:Descriptor="Hours Worked">
<wd:ID wd:type="WID">da128ce5a1dc103f5656dad4dad70868</wd:ID>
<wd:ID wd:type="Time_Code_Reference_ID">CA Hours Worked In/Out</wd:ID>
</wd:Time_Type>
<wd:Calculated_Quantity>4.75</wd:Calculated_Quantity>
</wd:Time_Blocks_for_Worker>
<wd:Time_Blocks_for_Worker>
<wd:Day_of_the_Week>Tuesday</wd:Day_of_the_Week>
<wd:Calendar_Date>2017-07-11-07:00</wd:Calendar_Date>
<wd:Time_Type wd:Descriptor="Hours Worked">
<wd:ID wd:type="WID">da128ce5a1dc103f5656dad4dad70868</wd:ID>
<wd:ID wd:type="Time_Code_Reference_ID">CA Hours Worked In/Out</wd:ID>
</wd:Time_Type>
<wd:Calculated_Quantity>4.5</wd:Calculated_Quantity>
</wd:Time_Blocks_for_Worker>
我正在尝试如下的 XSL 循环和比较。
<Calculated_Quantity>
<xsl:for-each select="wd:Time_Blocks_for_Worker">
<xsl:choose>
<xsl:if test="translate(wd:Day_of_the_Week, $smallcase, $uppercase) = wd:Day_of_the_Week">
<xsl:when test="wd:Day_of_the_Week = wd:Day_of_the_Week">
<xsl:value-of
select="sum(wd:Time_Blocks_for_Worker/wd:Calculated_Quantity_1 | wd:Time_Blocks_for_Worker/wd:Calculated_Quantity)"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</Calculated_Quantity>
【问题讨论】:
-
这是一个分组问题。搜索一下——这可能是这里最常被问到的 XSLT 问题。请注意,XSLT 1.0 或 2.0 的答案是不同的。