ภาพรวมและวัตถุประสงค์
กล่อง, มอส’ Web part สำหรับแบบสอบถามเนื้อหา (CQWP) แสดงผลของรูปแบบรายการ, คล้ายกับผลลัพธ์การค้นหา. ก็ยังสามารถแสดงผลลัพธ์ในรูปแบบตาราง (อาทิ. รูปแบบตาราง HTML). รูปแบบตารางจะดีกว่าในบางกรณี. ผมอธิบายวิธีการให้บรรลุผลนั้นในบทความนี้.
สถานการณ์ของธุรกิจ
ฉันทำงานกับไคลเอนต์ในการไวร์เลสมอทั่วทั้งองค์กร. เราได้ออกแบบระบบของพวกเขาให้เป็นพลเมืองชั้นหนึ่งในลำดับชั้นโครงการ และมีไซต์ระดับบนสุดของตัวเอง. ผู้จัดการโครงการรักษารายการเดี่ยวของข้อมูลสรุปโครงการ, เช่นชื่อเรื่อง, งบประมาณ, วันสิ้นสุดที่คาดไว้, งบประมาณคงเหลือและเขตข้อมูลอื่นชนิดสรุป. โดย "ซิงเกิลตัน" ผมหมายถึง รายการ SharePoint แบบกำหนดเองที่รับประกันว่า จะประกอบด้วยเพียงรายการเดียว. Simplistically, โดยมีลักษณะดังนี้:
วิธีทางเทคนิคอยู่มากเหมือนกันตามที่อธิบายไว้ ที่นี่ (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP การใช้การแปลง XSL ผาย HTML ในเบราว์เซอร์แสดง.
ฉันวาดภาพเสมอผลก่อนดำลงใน XSL เพราะ XSL เป็นฝันร้าย. นี่คือผลของฉันต้อง:
ผลลัพธ์ที่สร้าง HTML ดังนี้:
|
<html>
<เนื้อความ>
<ศูนย์>
<ตาราง เส้นขอบ= 1>
<!-- ป้ายชื่อ->
<tr bgcolor=สีฟ้า>
<td><แบบอักษร สี=ขาว><b>ชื่อโครงการ</b></แบบอักษร></td>
<td การจัดตำแหน่ง=ขวา><แบบอักษร สี=ขาว><b>วันเสร็จสมบูรณ์</b></แบบอักษร></td>
<td การจัดตำแหน่ง=ขวา><แบบอักษร สี=ขาว><b>งบประมาณ</b></แบบอักษร></td>
<td การจัดตำแหน่ง=ขวา><แบบอักษร สี=ขาว><b>ค่าใช้จ่ายจริง</b></แบบอักษร></td>
<td><แบบอักษร สี=ขาว><b>สถานะโดยรวม</b></แบบอักษร></td>
</tr>
<tr>
<td>ห้องคอมพิวเตอร์ใหม่ลวด.</td>
<td การจัดตำแหน่ง=ขวา>02/01/08</td>
<td การจัดตำแหน่ง=ขวา>22,500.00</td>
<td การจัดตำแหน่ง=ขวา>19,000.00</td>
<td>ในระหว่างดำเนินการ</td>
</tr>
<tr>
<td>เซิร์ฟเวอร์ SQL รุ่นสำรอง</td>
<td การจัดตำแหน่ง=ขวา>04/01/08</td>
<td การจัดตำแหน่ง=ขวา>7,500.00</td>
<td การจัดตำแหน่ง=ขวา>0.00</td>
<td>การวางแผน</td>
</tr>
</ตาราง>
</ศูนย์>
</เนื้อความ>
</html>
|
วิธีการ
ทำตามขั้นตอนเหล่านี้เพื่อสร้างตาราง:
- ระบุส่วนประกอบของตาราง (แถว/คอลัมน์).
- กำหนด และสร้างคอลัมน์ของไซต์ที่จำเป็น.
- สร้างไซต์ย่อยสำหรับโครงการและรายเดี่ยว.
- CQWP การเพิ่มหน้าเว็บ และการค้นหารายการ.
- แก้ไข XML ของ CQWP เพื่อรวบรวมค่าคอลัมน์เพิ่มเติม.
- แก้ไข XSL เพื่อสร้างตาราง.
ฉันจะเน้นเลขหก. หมายเลขหนึ่งถึงสี่คือ ตรงไปข้างหน้าและสิ่งที่ผู้ใช้ CQWP แล้วทำ. หมายเลข 5 ได้รับเอกสารเชิญผู้อื่นรวมถึงหมดแรงจอลาเดนบทความนี้จาก MSDN ที่นี่ (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) และบล็อกเฮโซโลมอน ที่นี่ (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
ถั่วและสลักเกลียว
เริ่มต้น และดำเนินการขั้นตอนที่หนึ่งถึงห้าตามเอกสาร MSDN และบทเฮโซโลมอน.
ณ จุดนี้, คุณเพิ่ม CQWP ของคุณไปยังหน้า และคุณได้ของคุณ <CommonViewFields> กำหนดค่าตามความจำเป็น.
ทำตามขั้นตอนปกติ, ได้รับผลระดับกลางเหล่านี้:
1. สร้างชนิดเนื้อหา, รายการที่กำหนดเองสำหรับชนิดของเนื้อหานั้นและไซต์สอง templatized. นี่คือชนิดของเนื้อหา:
นี่คือโครงสร้างของไซต์:
2. เพิ่ม CQWP หลังจากการสร้างโครงการย่อยและเดี่ยวของฉันรายการสรุปโครงการ:
3. เพิ่มข้อมูลเพิ่มเติมทั้งหมดที่ต้องผ่านการ <CommonViewFields>:
<คุณสมบัติ ชื่อ="CommonViewFields" ชนิด="สายอักขระ">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</คุณสมบัติ>
หมายเหตุที่ผมจะให้ฟิลด์คุณสมบัติทั้งหมดในหนึ่งบรรทัดหรือ จะไม่ทำงาน (CQWP จะบอกว่า สอบถามสินค้าไม่ส่งคืน).
4. ณ จุดนี้, เราพร้อมที่จะก้าวตามบทความของ MSDN และพลิกบนผ่านบทความเฮโซโลมอน. ทำตามขั้นตอนของเธอเริ่มต้นใกล้ขั้นตอน #5 การสร้างแบบกำหนดเอง / รุ่น ItemStyle.xsl unghosted. ฉันทำตามคำแนะนำของเฮ, ค่าผ่านขั้นตอน 11 และได้รับผลระดับกลางเหล่านี้:
4.1: ชื่อแม่แบบ XSL ของฉันเป็นดังนี้:
<xsl:แม่ชื่อ = "กริด" ตรง = "แถว[@Style = 'เส้นตาราง']" โหมด = "itemstyle">
ฉันแก้ไขเล็กน้อยเธอแนะนำ <xsl:แต่สำหรับละ …> โดยการเพิ่มการ <br /> แท็กให้รายการทำความสะอาด:
<xsl:แต่สำหรับละ เลือก="@*">
P:<xsl:ค่าของ เลือก="ชื่อ()" /><br/>
</xsl:แต่สำหรับละ>
4.2: ฉันปรับเปลี่ยน web part, ไปที่ลักษณะ และเลือกของฉันเส้น"" ลักษณะ:
ใช้การเปลี่ยนแปลง และนี่คือผลลัพธ์:
เราสามารถดูจากด้านบนที่เขตที่เราต้องการ (ชื่อโครงการ, ค่าใช้จ่าย, สถานะ, ฯลฯ) สำหรับเราใช้เมื่อเราส่ง HTML. ไม่เฉพาะที่, แต่เราเห็นชื่อที่เราต้องอ้างอิงคอลัมน์นั้นใน XSL. ตัวอย่าง, เราอ้างอิงถึงสถานะของโครงการเป็น "Project_x005F_x0020_Name".
ณ จุดนี้, เราออก จากบล็อกของเฮทเธอร์ และจากยักษ์ใหญ่เหล่านี้, เพิ่มของตัวเองหน่อย.
ContentQueryMain.xsl
หมายเหตุ: เมื่อทำการเปลี่ยนแปลงทั้ง ContentQueryMain.xsl เป็น ItemStyle.xsl, คุณต้องตรวจสอบแฟ้มเหล่านั้นกลับก่อนที่คุณเห็นผลของการเปลี่ยนแปลง.
สำหรับการทำตาราง, มอใช้สองแฟ้ม XSL ที่แตกต่างกันเพื่อให้ผลลัพธ์ที่เราเห็นจากการ CQWP. การสร้างบิตก่อนหน้าของผลผลิต, เราปรับ ItemStyle.xsl. มออื่นไฟล์ XSL ที่ใช้จริง, ContentQueryMain.xsl เพื่อร่วมกับ ItemStyle.xsl เพื่อสร้าง HTML ของ. ตามความหมายของชื่อ, ContentQueryMain.xsl เป็นหลัก"" XSL ที่ควบคุมการไหลโดยรวมแปล. คำนวณซ้ำผ่านรายการที่พบทั้งหมด และผ่านหนึ่งโดยหนึ่งเพื่อแม่ใน ItemStyle.xsl. เราจะปรับเปลี่ยน ItemStyle.xsl สร้างเปิด <ตาราง> แท็กก่อนเปล่งแถวแรกของข้อมูลและการ <ตาราง> ป้ายหลังจากเปล่งแถวสุดท้าย. เพื่อให้บรรลุนี้, ContentQueryMain.xsl มีการปรับเปลี่ยนการส่งผ่านพารามิเตอร์ที่สองของตาราง"" แบบ ItemStyle.xsl, "แถวสุดท้าย" "ปัจจุบันแถว". ItemStyle.xsl ใช้เหล่านี้อย่างมีเงื่อนไขกิ๊กแท็กจำเป็น.
การใช้เทคนิคเฮโซโลมอน, เราค้นหา ContentQueryMain.xsl. ตั้งอยู่ในเดียวกันเป็น ItemStyle.xsl. หน้าจอนี้จะช่วย:
เราต้องทำการเปลี่ยนแปลงต่อไปนี้:
- ปรับเปลี่ยนแม่แบบ xsl, "CallItemTemplate" ที่จริงเรียกใช้แม่แบบตารางของเราใน ItemStyle.xsl. เราจะผ่านสองพารามิเตอร์แบบตารางนั้นจะมีข้อมูลที่ต้องสร้างเปิด และปิดอย่างมีเงื่อนไข <ตาราง> แท็ก.
- แก้ไขบิตอื่นของ ContentQueryMain.xsl ที่เรียก "CallItemTemplate" เพื่อส่งผ่าน "LastRow" พารามิเตอร์เพื่อ LastRow ที่อาจผ่านไปบนแม่แบบตารางของเรา.
ค้นหาแบบชื่อ "OuterTemplate.CallItemTemplate" ระบุสายอักขระ:
<xsl:แม่แบบ ชื่อ="OuterTemplate.CallItemTemplate">
แทนแม่แบบทั้งหมดเป็นดังนี้:
|
<xsl:แม่แบบ ชื่อ="OuterTemplate.CallItemTemplate">
<xsl:พารามิเตอร์ ชื่อ="CurPosition" />
<!--
เพิ่ม "LastRow" พารามิเตอร์.
เราเพียงใช้เมื่อผ่านรูปแบบรายการใน "ตาราง".
-->
<xsl:พารามิเตอร์ ชื่อ="LastRow" />
<xsl:เลือก>
<xsl:เมื่อ ทดสอบ="@Style = 'NewsRollUpItem'">
<xsl:แม่แบบที่ใช้ เลือก="." โหมด="itemstyle">
<xsl:มีพารามิเตอร์ ชื่อ="EditMode" เลือก="$cbq_iseditmode" />
</xsl:แม่แบบที่ใช้>
</xsl:เมื่อ>
<xsl:เมื่อ ทดสอบ="@Style = 'NewsBigItem'">
<xsl:แม่แบบที่ใช้ เลือก="." โหมด="itemstyle">
<xsl:มีพารามิเตอร์ ชื่อ="CurPos" เลือก="$CurPosition" />
</xsl:แม่แบบที่ใช้>
</xsl:เมื่อ>
<xsl:เมื่อ ทดสอบ="@Style = 'NewsCategoryItem'">
<xsl:แม่แบบที่ใช้ เลือก="." โหมด="itemstyle">
<xsl:มีพารามิเตอร์ ชื่อ="CurPos" เลือก="$CurPosition" />
</xsl:แม่แบบที่ใช้>
</xsl:เมื่อ>
<!--
ส่งตำแหน่งปัจจุบันและ lastrow ไปแบบ itemstyle.xsl ตาราง.
ItemStyle.xsl จะใช้ที่กิ๊กเปิด และปิด <ตาราง> แท็ก.
-->
<xsl:เมื่อ ทดสอบ="@Style = 'เส้นตาราง'">
<xsl:แม่แบบที่ใช้ เลือก="." โหมด="itemstyle">
<xsl:มีพารามิเตอร์ ชื่อ="CurPos" เลือก="$CurPosition" />
<xsl:มีพารามิเตอร์ ชื่อ="ล่าสุด" เลือก="$LastRow" />
</xsl:แม่แบบที่ใช้>
</xsl:เมื่อ>
<xsl:มิฉะนั้น>
<xsl:แม่แบบที่ใช้ เลือก="." โหมด="itemstyle">
</xsl:แม่แบบที่ใช้>
</xsl:มิฉะนั้น>
</xsl:เลือก>
</xsl:แม่แบบ>
|
ความคิดเห็นอธิบายวัตถุประสงค์ของการเปลี่ยนแปลง.
แน่นอน, "OuterTemplate.CallItemTemplate" ตัวเองเรียกว่าจากแม่แบบอื่น. ค้นหาแม่แบบนั้น โดยการค้นหาสายอักขระข้อความนี้:
<xsl:แม่แบบ ชื่อ="OuterTemplate.Body">
เลื่อนผ่านคำสั่งใน OuterTemplate.Body และแทรกพารามิเตอร์ LastRow ดังนี้ (แสดงเป็นข้อคิดเห็นเป็นตัวเอียง):
<xsl:เรียกแม่ ชื่อ="OuterTemplate.CallItemTemplate">
<xsl:มีพารามิเตอร์ ชื่อ="CurPosition" เลือก="$CurPosition" />
<!-- แทรกพารามิเตอร์ LastRow. -->
<xsl:มีพารามิเตอร์ ชื่อ="LastRow" เลือก="$LastRow"/>
</xsl:เรียกแม่>
หลังจากทั้งหมดนี้, เรามีสิ่งที่ติดตั้งอย่างถูกต้องเพื่อ ItemStyle.xsl ของเราสามารถปล่อยในที่สุด <ตาราง> แท็กที่เหมาะ.
ItemStyle.Xsl
หมายเหตุ: อีกครั้ง, ตรวจสอบใน ItemStyle.xsl หลังจากทำการเปลี่ยนแปลงเพื่อให้คุณเห็นผลการเปลี่ยนแปลงเหล่านั้น.
เรามีงานที่นี่:
- แทนแม่แบบตารางทั้งหมด. คุณสามารถคัดลอก/วางจากด้านล่าง.
- เพิ่มบางจัมโบ้ mumbo นอกกำหนดแม่แบบที่ช่วยให้ "formatcurrency" แม่ทำงาน. (คุณสามารถทราบว่า มีจับ tenuous ใน XSL).
แรก, ใกล้ด้านบนของ ItemStyle.xsl, เพิ่มบรรทัดนี้:
<!-- บางจัมโบ้ mumbo ที่ช่วยให้เราสามารถแสดงอเมริกา. สกุลเงิน. -->
<xsl:รูปทศนิยม ชื่อ="พนักงาน" ตัวเลข="D" />
<xsl:แม่แบบ ชื่อ="ค่าเริ่มต้น" ตรงกับ="*" โหมด="itemstyle">
หมายเหตุที่เพิ่มนั้นโดยตรงก่อน <xsl:ชื่อต้น "เริ่มต้น =" …> คำจำกัดความ.
ถัดไป, ย้อนกลับไปยังแม่แบบตารางของเรา. แทนแบบตารางทั้งหมด ด้วยรหัสต่อไปนี้. มีความเห็นอย่างละเอียด, แต่อย่าลังเลที่จะส่ง หรือฝากข้อคิดเห็นบนบล็อกของฉันถ้าคุณมีคำถาม.
|
<xsl:แม่แบบ ชื่อ="เส้นตาราง" ตรงกับ="แถว[@Style = 'เส้นตาราง']" โหมด="itemstyle">
<!--
ContentMain.xsl ผ่าน CurPos และล่าสุด.
เราใช้เหล่านี้อย่างมีเงื่อนไขกิ๊กเปิด และปิด <ตาราง> แท็ก.
-->
<xsl:พารามิเตอร์ ชื่อ="CurPos" />
<xsl:พารามิเตอร์ ชื่อ="ล่าสุด" />
<!-- ตัวแปรต่อไปนี้เป็น unmodified จาก ItemStyle.xsl มาตรฐาน -->
<xsl:ตัวแปร ชื่อ="SafeImageUrl">
<xsl:เรียกแม่ ชื่อ="OuterTemplate.GetSafeStaticUrl">
<xsl:มีพารามิเตอร์ ชื่อ="UrlColumnName" เลือก="'ImageUrl'"/>
</xsl:เรียกแม่>
</xsl:ตัวแปร>
<xsl:ตัวแปร ชื่อ="SafeLinkUrl">
<xsl:เรียกแม่ ชื่อ="OuterTemplate.GetSafeLink">
<xsl:มีพารามิเตอร์ ชื่อ="UrlColumnName" เลือก="'LinkUrl'"/>
</xsl:เรียกแม่>
</xsl:ตัวแปร>
<xsl:ตัวแปร ชื่อ="DisplayTitle">
<xsl:เรียกแม่ ชื่อ="OuterTemplate.GetTitle">
<xsl:มีพารามิเตอร์ ชื่อ="ชื่อเรื่อง" เลือก="@Title"/>
<xsl:มีพารามิเตอร์ ชื่อ="UrlColumnName" เลือก="'LinkUrl'"/>
</xsl:เรียกแม่>
</xsl:ตัวแปร>
<xsl:ตัวแปร ชื่อ="LinkTarget">
<xsl:ถ้า ทดสอบ="@OpenInNewWindow = 'จริง'" >_blank</xsl:ถ้า>
</xsl:ตัวแปร>
<!--
ที่นี่เรากำหนดตัวแปร, "tableStart". นี้ประกอบด้วย HTML ที่เราใช้กำหนดเปิดตัวเป็นป้ายชื่อคอลัมน์. หมายเหตุว่า ถ้า CurPos = 1, รวม HTML แท็ก CDATA.
มิฉะนั้น, มันจะว่างเปล่า.
ค่าของ tableStart คือ emited ทุกครั้งที่เรียกว่า ItemStyle ผ่าน ContentQueryMain.xsl.
-->
<xsl:ตัวแปร ชื่อ="tableStart">
<xsl:ถ้า ทดสอบ="$CurPos = 1">
<![CDATA[
<เส้นขอบตาราง = 1>
<tr bgcolor = "บลู">
<td><สีแบบอักษร = "สีขาว"><b>ชื่อโครงการ</b></แบบอักษร></td>
<การจัดตำแหน่ง td = "ขวา"><สีแบบอักษร = "สีขาว"><b>วันเสร็จสมบูรณ์</b></แบบอักษร></td>
<การจัดตำแหน่ง td = "ขวา"><สีแบบอักษร = "สีขาว"><b>งบประมาณ</b></แบบอักษร></td>
<การจัดตำแหน่ง td = "ขวา"><สีแบบอักษร = "สีขาว"><b>ค่าใช้จ่ายจริง</b></แบบอักษร></td>
<td><สีแบบอักษร = "สีขาว"><b>สถานะโดยรวม</b></แบบอักษร></td>
</tr>
]]>
</xsl:ถ้า>
</xsl:ตัวแปร>
<!--
ตัวแปรอื่น, tableEnd เพียงแค่กำหนดปิดแท็กตาราง.
เช่นเดียวกับ tableStart, มันเป็นเสมอ emited. นี่คือเหตุผลที่ค่ากำหนดให้อย่างมีเงื่อนไขตามว่าเราได้รับผ่านแถวล่าสุดโดย ContentQueryMain.xsl.
-->
<xsl:ตัวแปร ชื่อ="tableEnd">
<xsl:ถ้า ทดสอบ="$CurPos = $Last">
<![CDATA[ </ตาราง> ]]>
</xsl:ถ้า>
</xsl:ตัวแปร>
<!--
จะส่งเนื้อหาของ tableStart. ถ้าไม่ส่งให้เรา ContentQueryMain.xsl แถวแรก, แล้ว เรารู้ค่าของมันจะว่างเปล่า.
ปิดใช้งานการออกหลบหนีเนื่องจากเมื่อ tableStart มันไม่ว่างเปล่า, มีจริง HTML ที่เราต้องการแสดงผล โดยเบราว์เซอร์. ถ้าเราไม่บอก ตัวแบ่งเพื่อปิดการใช้งาน XSL ที่ออกหลบหนี, มันจะสร้างสิ่งเช่น"<ตาราง>" แทนของ"<ตาราง>".
-->
<xsl:ค่าของ เลือก="$tableStart" ปิดการใช้งานผลผลิตหลบหนี="ใช่"/>
<tr>
<!--
P:Project_x005F_x0020_Name P:Project_x005F_x0020_End_x005F_x0020_Date P:Project_x005F_x0020_Budget P:Project_x005F_x0020_Expenses P:Project_x005F_x0020_Status
-->
<td>
<xsl:ค่าของ เลือก="@Project_x005F_x0020_Name"/>
</td>
<td การจัดตำแหน่ง="ขวา">
<xsl:ค่าของ เลือก="@Project_x005F_x0020_End_x005F_x0020_Date"/>
</td>
<td การจัดตำแหน่ง="ขวา">
<xsl:เรียกแม่ ชื่อ="formatcurrency">
<xsl:มีพารามิเตอร์ ชื่อ="ค่า" เลือก="@Project_x005F_x0020_Budget"></xsl:มีพารามิเตอร์>
</xsl:เรียกแม่>
</td>
<td การจัดตำแหน่ง="ขวา">
<xsl:เรียกแม่ ชื่อ="formatcurrency">
<xsl:มีพารามิเตอร์ ชื่อ="ค่า" เลือก="@Project_x005F_x0020_Expenses"> </xsl:มีพารามิเตอร์>
</xsl:เรียกแม่>
</td>
<td>
<xsl:ค่าของ เลือก="@Project_x005F_x0020_Status"/>
</td>
<!--
ทั้งหมดต่อไปนี้เป็นความเห็นออกมาชี้แจงสิ่ง.
อย่างไรก็ตาม, นำกลับมา และสิ่งนั้นเป็นการ <td> เมื่อต้องการดูผลของ.
-->
<!--
<รหัส div = "linkitem" ชั้น = "สินค้า">
<xsl:ถ้าทดสอบ = "สายอักขระความยาว($SafeImageUrl) != 0">
<div คลา = "ภาพตั้งซ้าย">
<การ href = "{$SafeLinkUrl}" เป้าหมาย = "{$LinkTarget}">
<ชั้นใช้ได้ img = "ภาพความกว้างคง" src = "{$SafeImageUrl}" alt = "{@ImageUrlAltText}"/>
</การ>
</div>
</xsl:ถ้า>
<div คลา = "เชื่อมโยงสินค้า">
<xsl:เรียกแม่ name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<การ href = "{$SafeLinkUrl}" เป้าหมาย = "{$LinkTarget}" ชื่อ = "{@LinkToolTip}">
<xsl:เลือกค่าของ = "$DisxslyTitle" />
</การ>
<คลาส div = "คำอธิบาย">
<xsl:ค่าของ select="@Description" />
</div>
</div>
</div>
-->
</tr>
<!--
กิ๊กปิดตารางแท็ก. ถ้าเราไม่ได้อยู่ในแถวสุดท้าย,
นี้จะว่างเปล่า.
-->
<xsl:ค่าของ เลือก="$tableEnd" ปิดการใช้งานผลผลิตหลบหนี="ใช่"/>
</xsl:แม่แบบ>
<xsl:แม่แบบ ชื่อ="formatcurrency">
<xsl:พารามิเตอร์ ชื่อ="ค่า" เลือก="0" />
<xsl:ค่าของ เลือก='รูปแบบหมายเลข($ค่า, "$DDD,DDD,DDDดีดี", "พนักงาน")' />
</xsl:แม่แบบ>
|