การใช้ Templates ในลำดับย้อนกลับด้วย XSLT

เมื่อทำงานกับข้อมูล XML คุณอาจพบสถานการณ์ที่คุณต้องจัดการกับลำดับการแสดงผลขององค์ประกอบ (elements) ความต้องการทั่วไปคือการแสดงเนื้อหาของโหนดในลำดับย้อนกลับ บล็อกโพสต์นี้จะนำคุณผ่านขั้นตอนการทำเช่นนั้นด้วย XSLT (Extensible Stylesheet Language Transformations)

การเข้าใจปัญหา

สมมติว่าเรามีโครงสร้าง XML ดังนี้:

<root>
    <node>x</node>
    <node>y</node>
    <node>a</node>
</root>

ในตัวอย่างนี้ คุณต้องการแสดงเนื้อหาขององค์ประกอบ <node> ในลำดับย้อนกลับ ซึ่งจะทำให้เกิดผลลัพธ์: ayx นี่เป็นงานทั่วไปที่สามารถทำได้ด้วย XSLT โดยการใช้ apply-templates และคุณสมบัติการจัดเรียง (sorting)

ทางออก: การย้อนลำดับโหนด

เพื่อที่จะได้ผลลัพธ์ที่ต้องการ (เช่น การแสดงโหนดในลำดับย้อนกลับ) เราจะใช้แท็ก xsl:sort ภายใน apply-templates ขั้นตอนการดำเนินการจะเป็นดังนี้:

ขั้นตอนที่ 1: การจับคู่ Template ของ Root

เริ่มต้นด้วยการจับคู่ระดับ root ของเอกสาร XML ของคุณ ภายใน template นี้ คุณจะใช้ apply-templates กับองค์ประกอบ <node> ขณะเดียวกันใช้ฟังก์ชัน sort เพื่อย้อนลำดับ

<xsl:template match="/">
    <xsl:apply-templates select="root/node">
        <xsl:sort select="position()" data-type="number" order="descending"/>
    </xsl:apply-templates>
</xsl:template>
  • <xsl:template match="/">: ใช้เพื่อจับคู่กับ root ของเอกสาร XML
  • <xsl:apply-templates select="root/node">: คำสั่งนี้เลือกองค์ประกอบ <node> ทั้งหมดสำหรับการประมวลผล
  • <xsl:sort select="position()" data-type="number" order="descending"/>: ทำการจัดเรียงโหนดตามตำแหน่งในลำดับที่ลดลง ซึ่งเป็นสิ่งสำคัญสำหรับการแสดงผลในลำดับย้อนกลับ

ขั้นตอนที่ 2: การกำหนด Template สำหรับ Node

ถัดไป คุณต้องสร้าง template อีกหนึ่งตัวเพื่อจัดการว่าจะแสดงผลแต่ละ <node> อย่างไร ซึ่งจะผลิตค่าออกมาจากแต่ละองค์ประกอบ <node>

<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>
  • <xsl:template match="node">: Template นี้จับคู่กับองค์ประกอบ <node> แต่ละตัว
  • <xsl:value-of select="."/>: ทำการดึงค่าข้อความจากโหนดปัจจุบันและแสดงผล

โค้ด XSLT ที่สมบูรณ์

เมื่อนำทั้งสอง template รวมกัน คุณจะได้โค้ด XSLT ดังต่อไปนี้:

<xsl:template match="/">
    <xsl:apply-templates select="root/node">
        <xsl:sort select="position()" data-type="number" order="descending"/>
    </xsl:apply-templates>
</xsl:template>

<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>

ผลลัพธ์

หลังจากที่ใช้โค้ด XSLT นี้กับ XML ที่ให้มา ผลลัพธ์ที่ได้จะแสดงค่าโหนดในลำดับย้อนกลับจากการปรากฏ:

ayx

สรุป

การย้อนลำดับโหนดใน XML ด้วยการใช้ apply-templates ใน XSLT เป็นเรื่องง่ายเมื่อคุณเข้าใจวิธีการใช้การดำเนินการ sort อย่างมีประสิทธิภาพ วิธีการนี้เป็นประโยชน์เมื่อคุณต้องจัดการการนำเสนอข้อมูลสำหรับรายงานหรือแอปพลิเคชันเว็บเพื่อปรับปรุงประสบการณ์ของผู้ใช้

โดยการปฏิบัติตามขั้นตอนเหล่านี้ คุณสามารถควบคุมการแสดงผลข้อมูล XML ของคุณได้อย่างมีประสิทธิภาพด้วย XSLT ขอให้สนุกกับการเขียนโค้ด!