วิธีการเพิ่มภาพใน XML ให้แปลงเป็น HTML โดยใช้ XSLT
การแปลงเอกสาร XML เป็น HTML อาจจะมีความซับซ้อนในบางครั้ง โดยเฉพาะเมื่อคุณต้องจัดการกับองค์ประกอบอย่างภาพ ผู้พัฒนาหลายคนประสบกับข้อผิดพลาดเมื่อพยายามดำเนินการนี้ และการเข้าใจสาเหตุที่แท้จริงสามารถช่วยในการใช้วิธีแก้ปัญหาที่มีประสิทธิภาพ ในโพสต์นี้เราจะวิเคราะห์ปัญหาทั่วไปและเสนอวิธีง่าย ๆ และมีประสิทธิภาพในการเพิ่มภาพในการแปลง XML เป็น HTML ของคุณ
ปัญหา
พิจารณาเอกสาร XML ที่เรียบง่ายซึ่งมีข้อมูลภาพ หากคุณพยายามจะแปลงมันเป็น HTML และพบข้อความแสดงข้อผิดพลาด:
“Cannot write an attribute node when no element start tag is open,”
นี่แสดงให้เห็นว่ามีปัญหาเกี่ยวกับวิธีการที่คุณพยายามเพิ่มคุณสมบัติของแท็กภาพโดยใช้ XSLT
มาลองดูเนื้อหา XML และโค้ด XSLT
ที่อาจทำให้เกิดปัญหานี้กัน
เนื้อหา XML ตัวอย่าง
<root>
<HeaderText>
<HeaderText>ทดสอบชื่อ</HeaderText>
</HeaderText>
<Image>
<img width="100" height="100" alt="FPO lady" src="/uploadedImages/temp_photo_small.jpg"/>
</Image>
<BodyText>
<p>นี่คือการทดสอบข้อความในเนื้อหา<br /></p>
</BodyText>
<ShowLinkArrow>false</ShowLinkArrow>
</root>
โค้ด XSLT ที่เกี่ยวข้อง
<xsl:stylesheet version="1.0" extension-element-prefixes="msxsl"
exclude-result-prefixes="msxsl js dl" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:js="urn:custom-javascript" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:dl="urn:datalist">
<xsl:output method="xml" version="1.0" omit-xml-declaration="yes" indent="yes" encoding="utf-8"/>
<xsl:template match="/" xml:space="preserve">
<img>
<xsl:attribute name="width">
100
</xsl:attribute>
<xsl:attribute name="height">
100
</xsl:attribute>
<xsl:attribute name="class">
CalloutRightPhoto
</xsl:attribute>
<xsl:attribute name="src">
<xsl:copy-of select="/root/Image/node()"/>
</xsl:attribute>
</img>
</xsl:template>
</xsl:stylesheet>
ที่นี่ปัญหาอยู่ในโค้ดส่วนต่อไปนี้:
<xsl:attribute name="src">
<xsl:copy-of select="/root/Image/node()"/>
</xsl:attribute>
คำสั่ง xsl:copy-of
พยายามที่จะคัดลอกโหนดหรือชุดโหนด แต่คุณสมัติสามารถมีค่าเป็นตัวอักษรเท่านั้น ไม่สามารถมีโหนดทั้งหมดได้
วิธีแก้ปัญหา
แทนที่จะแก้ไขปัญหานี้ คุณสามารถใช้คำสั่ง xsl:value-of
หรือเทมเพลตค่าคุณสมบัติ (Attribute Value Template – AVT) เพื่อให้ได้ผลลัพธ์ที่ต้องการมีประสิทธิภาพมากขึ้น
วิธีที่แนะนำ: การใช้เทมเพลตค่าคุณสมบัติ
วิธีแก้ปัญหาที่สั้นและสวยงามยิ่งขึ้น ได้แก่:
<img width="100" height="100" src="{/root/Image/node()}" class="CalloutRightPhoto"/>
เทมเพลตค่าคุณสมบัติ (AVT) คืออะไร?
- การใช้
{}
ในคุณสมบัตินั้นแสดงถึงเทมเพลตค่าคุณสมบัติ - มันทำให้คุณสามารถรวมการแสดงผล XPATH ที่คืนค่าข้อความทำให้เหมาะสมสำหรับการตั้งค่าคุณสมบัติอย่างไดนามิก
ทำไมวิธีนี้ถึงได้ผล
- บรรทัดเดียวนี้แทนที่ความจำเป็นหลายบรรทัดของ
xsl:attribute
ลดความซับซ้อน - การแสดง XPath แจ้งให้โปรเซสเซอร์
XSLT
เอาค่าข้อความเมื่อใช้ใน AVT
บทสรุป
การเพิ่มภาพเมื่อแปลงเอกสาร XML เป็น HTML ผ่าน XSLT
ไม่จำเป็นต้องซับซ้อน โดยการใช้เทมเพลตค่าคุณสมบัติ คุณสามารถทำให้โค้ดของคุณมีประสิทธิภาพมากขึ้นและหลีกเลี่ยงข้อผิดพลาดทั่วไป ครั้งถัดไปที่คุณพบปัญหาเกี่ยวกับการนำภาพเข้ากับ XSLT
จำไว้ว่าควรใช้พลังของ AVTs ในการจัดการโค้ดให้สะอาดและมีประสิทธิภาพ
การปฏิบัติตามหลักการเหล่านี้จะทำให้การจัดการการแปลง XSLT
ราบรื่นยิ่งขึ้นและช่วยผลิตผลลัพธ์ที่คุณต้องการโดยไม่เกิดข้อผิดพลาดที่ไม่จำเป็น ขอให้สนุกกับการเขียนโค้ด!