การใช้ 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 ขอให้สนุกกับการเขียนโค้ด!