การประมวลผลจำนวนเต็มฝังอยู่ในสตริงใน XSL

ฉันมีค่าเวลาที่เก็บไว้ซึ่งอยู่ในรูปแบบ H:mm:ss ชั่วโมงอาจเป็นค่าใดก็ได้ตั้งแต่ 0 ไปจนถึงหลายวัน ข้อมูลนี้ถูกส่งในแท็ก XML และประมวลผลโดย XSL ที่จะแสดง จอแสดงผลที่ฉันต้องการมีรูปแบบ:

D days, HH:mm:ss (hours/minutes)

โดยที่แท็กสุดท้ายจะแสดงชั่วโมงหาก HH มากกว่า 0 นาทีหากเป็น 0

เมื่อพิจารณาจาก HH ดั้งเดิมซึ่งอาจมากกว่า 24 ฉันรู้ว่าฉันต้องการพื้น HH / 24 เพื่อให้ได้ค่าวัน จากนั้น HH % 24 ดั้งเดิมจะให้ชั่วโมงที่เหลือแก่ฉัน

ฉันยังจัดการกับคำถามแบบนาทีและชั่วโมงโดยใช้ xsl:when และ xsl:if อีกด้วย

มันได้รับวันและชั่วโมงจากค่าชั่วโมงที่ทำให้ฉันนิ่งงัน

แก้ไข จนถึงตอนนี้ ฉันกำลังดูสิ่งต่อไปนี้:

การประกาศตัวแปร

<xsl:variable name="time"><xsl:value-of select="time" /><xsl:variable>
<xsl:variable name="days"><xsl:value-of select="floor(substring-before(time, ':') / 24)" /></xsl:variable>
<xsl:variable name="hours"><xsl:value-of select="substring-before(time, ':') mod 24" /></xsl:variable>
<xsl:variable name="minutes"><xsl:value-of select="substring-after(time, ':')" /></xsl:variable>

ใช้

<xsl:if test="$days > 0">
    <xsl:value-of select="$days" /> days
</xsl:if>
<xsl:value-of select="$hours" />:<xsl:value-of select="$minutes" />

<xsl:choose>
    <xsl:when test="$hours > 0">
        hour<xsl:if test="$hours > 1">s</xsl:if>
    </xsl:when>
    <xsl:otherwise>
       minute<xsl:if test="$minute != '01:00'">s</xsl:if>
    </xsl:otherwise>
 </xsl:choose>

และเพื่อความกระจ่าง เวลาตัวอย่างจะเป็น <time>26:15:00</time> เป็นเวลา 1 วัน 2:15 ชั่วโมง


person justkt    schedule 03.05.2010    source แหล่งที่มา
comment
คำถามที่แท้จริงคืออะไร? คุณมีโค้ดตัวอย่างที่แสดงถึงสิ่งที่คุณพยายามทำอยู่หรือไม่?   -  person IAbstract    schedule 03.05.2010
comment
@ dboarman-FissureStudios - ฉันได้อัปเดตด้วยการแทงโค้ดแล้วและหวังว่าจะชี้แจงคำถามของฉันอีกสักหน่อย สิ่งที่ฉันต้องทำคือหาวิธีรับวันที่มีรูปแบบเป็นชั่วโมง นาที และวินาที แล้วแปลงให้เป็นสตริงที่ดี   -  person justkt    schedule 03.05.2010


คำตอบ (1)


ต่อไปนี้คือการแก้ไขที่ฉันต้องการเพื่อให้ความพยายามเดิมทำงานได้ ฉันต้องจำสัญญาณดอลลาร์ของฉันสำหรับตัวแปร ฉันจำเป็นต้องใช้ div แทน / สิ่งสำคัญที่สุดคือ ฉันต้องการนิพจน์ number เพื่อแปลงตัวเลขให้กับสตริงย่อย นี่คือสิ่งที่ฉันคิดขึ้นมา ฉันยินดีรับฟังความคิดเห็นที่จะปรับปรุง XSLT ของฉัน!

<xsl:variable name="time"><xsl:value-of select="time" /><xsl:variable>
<xsl:variable name="totalHours><xsl:value-of select="number(substring-before($time, ':'))" /></xsl:variable>
<xsl:variable name="days"><xsl:value-of select="floor($totalHours div 24)" /></xsl:variable>
<xsl:variable name="hours"><xsl:value-of select="$totalHours mod 24" /></xsl:variable>
<xsl:variable name="minutes"><xsl:value-of select="substring-after(time, ':')" /></xsl:variable>
person Community    schedule 03.05.2010