บทช่วยสอน XSLT - การแปลง XSLT & amp; องค์ประกอบพร้อมตัวอย่าง

บทช่วยสอนนี้อธิบายว่า XSLT คืออะไร การแปลง องค์ประกอบ และการใช้งานพร้อมตัวอย่าง ยังครอบคลุมถึงความสำคัญของ XPath ในการพัฒนารหัสการแปลง XSLT:

คำว่า “XSLT” เกิดจากการรวมคำสองคำ เช่น 'XSL' และ 'T' โดย 'XSL' เป็นรูปแบบย่อของ ' Extensible Stylesheet Language' และ 'T' เป็นรูปแบบย่อของ 'Transformation'

โดยพื้นฐานแล้ว XSLT เป็นภาษาการแปลงที่ใช้ในการแปลง/แปลงเอกสาร XML ต้นทางเป็นเอกสาร XML หรือเป็นรูปแบบอื่นๆ เช่น เป็น HTML, PDF โดยใช้ XSL-FO (การจัดรูปแบบวัตถุ) เป็นต้น

รู้เบื้องต้นเกี่ยวกับ XSLT

การแปลงเกิดขึ้นด้วยความช่วยเหลือของตัวประมวลผล XSLT ( เช่น แซกซอน ซาลัน) ตัวประมวลผล XSLT นี้รับเอกสาร XML ตั้งแต่หนึ่งไฟล์ขึ้นไปเป็นต้นฉบับโดยมีไฟล์ XSLT หนึ่งไฟล์ที่มีโค้ด XSLT เขียนอยู่ และเอกสารผลลัพธ์/เอาต์พุตจะถูกสร้างขึ้นในภายหลังตามที่แสดงในแผนภาพด้านล่าง

ตัวประมวลผล XSLT แยกวิเคราะห์เอกสาร XML ต้นทางโดยใช้ X-Path เพื่อนำทางไปยังองค์ประกอบต้นทางต่างๆ เริ่มตั้งแต่องค์ประกอบรากจนถึงจุดสิ้นสุดของเอกสาร

ทุกสิ่งที่คุณต้องรู้เกี่ยวกับ X-Path

การแปลง XSLT

สำหรับการเริ่มต้นการแปลง เราจำเป็นต้องมีเอกสาร XML หนึ่งฉบับซึ่งโค้ด XSLT จะรัน ไฟล์โค้ด XSLT เองและเครื่องมือหรือซอฟต์แวร์ที่มีตัวประมวลผล XSLT (คุณสามารถใช้ซอฟต์แวร์เวอร์ชันฟรีหรือเวอร์ชันทดลองสำหรับเอกสารองค์ประกอบราคาว่างโดยบังเอิญเหมือนในโค้ดด้านล่าง จากนั้นการประมวลผลควรหยุดทันทีที่โปรเซสเซอร์พบองค์ประกอบราคาว่าง ซึ่งสามารถทำได้ง่ายโดยใช้ xsl:message ภายในเงื่อนไขการทดสอบ if ตามด้านล่าง รหัส XSLT

การแจ้งเตือนดีบักเกอร์แสดงโดยหน้าจอมาตรฐานของแอปพลิเคชัน: การประมวลผลสิ้นสุดลงโดย xsl:message ที่บรรทัด 21

ป้อนรหัส XML:2

 SQL The Complete Reference James R. Groff McGraw-Hill  3rd 

อ้างอิงภาพหน้าจอสำหรับพื้นที่ที่ไฮไลต์:

รหัส XSLT:

Books:-

Terminating: price element is empty.
Book IDBook NameAuthor NamePublisherPriceEdition
0 อ้างอิงภาพหน้าจอสำหรับพื้นที่ที่ไฮไลต์:

ผลลัพธ์: โปรดทราบว่าทันทีที่โปรแกรมแยกวิเคราะห์พบป้ายราคาที่ว่างเปล่า จะยุติการประมวลผลทันทีเนื่องจากแท็กปิดของ และจะไม่อยู่ที่ส่วนท้ายของไฟล์

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition
5350192956XSLT Programmer's ReferenceMichael KayWrox$404th
3741122298Head First JavaKathy SierraO'reilly$191st

อ้างอิงภาพหน้าจอสำหรับพื้นที่ที่ไฮไลต์:

#19) & องค์ประกอบ

กำหนดพารามิเตอร์ให้กับเทมเพลตหากกำหนดไว้ภายใน สามารถกำหนดได้ทั้งภายในเป็นพารามิเตอร์ส่วนกลางหรือภายในเป็นพารามิเตอร์ภายในของแม่แบบนั้น

ค่าของ the จะถูกส่งผ่าน/จัดหาเมื่อแม่แบบถูกเรียกใช้โดย หรือ .

มันส่งค่าของพารามิเตอร์ที่กำหนดไว้ภายใน ไปยังเทมเพลต แอตทริบิวต์เช่น @name มีชื่อของพารามิเตอร์ซึ่งควรตรงกับแอตทริบิวต์ @name ขององค์ประกอบ @Select แอตทริบิวต์ใช้ในการตั้งค่าค่าของพารามิเตอร์นั้น

ในการดึงค่าของพารามิเตอร์เหมือนกับการใช้เครื่องหมายดอลลาร์แบบแปรผัน ($)

รหัส XML ของแหล่งที่มา:

   XSLT Programmer's Reference Michael Kay Wrox $40 4th   Head First Java Kathy Sierra O'reilly $19 1st   SQL The Complete Reference James R. Groff McGraw-Hill $45 3rd   

รหัส XSLT:

List of Books Name :-

Book Name:

อ้างอิงภาพหน้าจอสำหรับพื้นที่ที่ไฮไลต์:2

ผลลัพธ์ผลลัพธ์:

List of Books Name :-

Book Name: XSLT Programmer's Reference

Book Name: Head First Java

Book Name: SQL The Complete Reference

#20)

is used to import another stylesheet module inside our current stylesheet. This helps in achieving a modular XSLT development approach.

After importing all the templates get available to use. The priority of the templates defined in the parent stylesheet(which is importing another stylesheet) is higher than the imported stylesheet (which is imported by the parent stylesheet).

If another stylesheet also has the same name template as defined inside the template that is importing then the foreign templates get overridden by your own template.

Attribute @href is used as the URI of the stylesheet that you want to import.

#21)

Same as the above xsl:import, also helps in achieving a modular XSLT development approach. All the templates included by have the same priority/precedence as the calling stylesheet. It is like you copy all the templates from another stylesheet to your own stylesheet.

Attribute @href is used as the URI of the stylesheet that you want to import.

#22)

This element is used to specify the result tree in the output file. It contains attributes like @method that can have values like ‘XML’, ‘HTML’, ‘XHTML’ and ‘text’ by default is ‘XML’.

@encoding specifies the character encoding that comes in the output file as shown in below example encoding=”UTF-16″, the default values for XML or XHTML could be either UTF-8 or UTF-16. @indent specifies the indentation of the XML or HTML output code, for XML the default value is ‘no’ and for HTML and XHTML the default value is yes.

#23)

This element is used for stripping(removing) non-significant whitespace for the listed source element inside the @element attribute and if we want to strip whitespace from all the elements then we can use ‘*’ inside @elements attribute.

#24)

This element is used to preserve white spaces for the listed source element inside the @element attribute and if we want to preserve whitespace from all the elements, then we can use ‘*’ inside @elements attribute.

Conclusion

Thus in this article, we have learned about XSLT, frequently used XSLT elements, their usage with example source and target/result code, conversion or transformation of the source element to the target element.

We also discussed the importance of XPath to develop XSLT conversion code. We have seen the XSL template declaration and template calling & passing parameters. We learned to declare global and local variables, their usage in the XSLT code, and how to call them.

We learnt about different branching or conditional XSLT elements like xsl:if, xsl:for-each, xsl:choose. We understood the difference between shallow copying and deep copying, sorting of nodes, debugging of XSLT code by using xsl:message, the difference between named templates and match templates, and output formatting by using xsl:output.

About the Author: Himanshu P. is an experienced professional in the field of Information Technology. He has worked with ITC MNCs on cross-business domains and multiple technologies. Himanshu’s favorite pastime is reading magazines and blogging.

จุดประสงค์การเรียนรู้).

#1) รหัส XML

ด้านล่างคือรหัส XML ต้นทางที่รหัส XSLT จะเรียกใช้

ชื่อไฟล์: Books.xml

     XSLT Programmer's Reference Michael Kay Wrox $40 4th   Head First Java Kathy Sierra O'reilly $19 1st   SQL The Complete Reference James R. Groff McGraw-Hill $45 3rd   

#2) รหัส XSLT

ด้านล่างคือรหัส XSLT ซึ่งจะทำงานบนเอกสาร XML ด้านบน

ชื่อไฟล์: Books.xsl

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition

#3) ผลลัพธ์ / โค้ดเอาต์พุต

โค้ดด้านล่างจะถูกสร้างขึ้นหลังจากใช้โค้ด XSLT ในเอกสาร XML ด้านบน

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition
5350192956XSLT Programmer's ReferenceMichael KayWrox$404th
3741122298Head First JavaKathy SierraO'reilly$191st
9987436700SQL The Complete ReferenceJames R. GroffMcGraw-Hill$453rd

# 4) ดูผลลัพธ์ / ผลลัพธ์ในเว็บเบราว์เซอร์

หนังสือ:

รหัสหนังสือ ชื่อหนังสือ ชื่อผู้แต่ง สำนักพิมพ์ ราคา รุ่น
5350192956 ข้อมูลอ้างอิงโปรแกรมเมอร์ XSLT Michael Kay Wrox $40 อันดับ 4
3741122298 Head First Java Kathy Sierra O'reilly $19 ที่ 1
9987436700 SQL The Complete Reference James R. Groff McGraw-Hill $45 อันดับ 3

XSLT Elements

เพื่อทำความเข้าใจข้างต้น โค้ด XSLT และการทำงานของโค้ด ก่อนอื่นเราต้องเข้าใจองค์ประกอบ XSLT ต่างๆ และแอตทริบิวต์

#1) หรือ

โค้ด XSLT ทุกโค้ดต้องเริ่มต้นด้วยองค์ประกอบรูท หรือ

แอตทริบิวต์:

  • @xmlns:xsl: เชื่อมต่อเอกสาร XSLT กับมาตรฐาน XSLT
  • @version: กำหนดเวอร์ชันของรหัส XSLT เป็นparser.

#2)

การประกาศนี้กำหนดชุดของกฎที่ใช้กับการประมวลผลหรือแปลงองค์ประกอบอินพุตที่เลือกของเอกสารต้นทางเป็นกฎองค์ประกอบเป้าหมายที่กำหนดของเอกสารเอาต์พุต .

โดยพื้นฐานแล้ว มีเทมเพลตสองประเภทตามแอตทริบิวต์:

(i) เทมเพลตชื่อ: เมื่อ xsl: องค์ประกอบเทมเพลต มีแอตทริบิวต์ @name ซึ่งเรียกว่าเทมเพลตที่มีชื่อ

เทมเพลตที่มีชื่อถูกเรียกโดยองค์ประกอบ xsl:call- template

(ii) Match Template: องค์ประกอบ xsl: template มีแอตทริบิวต์ @match ที่มีรูปแบบการจับคู่หรือ XPath ที่ใช้ที่โหนดอินพุต

เทมเพลตการจับคู่ถูกเรียกโดยองค์ประกอบ xsl:apply-template

xsl : องค์ประกอบแม่แบบต้องมีแอตทริบิวต์ @match หรือแอตทริบิวต์ @name หรือทั้งสองอย่าง องค์ประกอบ xsl: template ที่ไม่มีแอตทริบิวต์ที่ตรงกันจะต้องไม่มีแอตทริบิวต์โหมดและไม่มีแอตทริบิวต์ลำดับความสำคัญ

มาเขียน XSLT ข้างต้นใหม่กันเถอะ(

a) โค้ด XSLT ตาม Match Template กับ . ดูสีเหลืองด้านล่าง & โค้ดการเปลี่ยนแปลงที่เน้นสีเทา จะให้ผลลัพธ์เอาต์พุตที่เหมือนกันด้านบน

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition

อ้างอิงภาพหน้าจอสำหรับพื้นที่ที่ไฮไลต์:

b) รหัส XSLT ตามเทมเพลตที่มีชื่อด้วย . ดูสีเหลืองด้านล่าง & โค้ดที่เปลี่ยนที่เน้นสีเทา จะให้ผลลัพธ์เอาต์พุตที่เหมือนกันด้านบน

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition

อ้างอิงภาพหน้าจอสำหรับไฮไลต์พื้นที่:

#3)

ตัวประมวลผลจะค้นหาและใช้เทมเพลตทั้งหมดที่มี XPath กำหนดไว้ในแอตทริบิวต์ @select

แอตทริบิวต์ @mode ยังใช้ในกรณีที่เราต้องการให้เอาต์พุตมากกว่าหนึ่งวิธีโดยมีเนื้อหาอินพุตเดียวกัน

#4)

ตัวประมวลผลจะทำการเรียกเทมเพลตที่มีค่าภายในแอตทริบิวต์ @name (จำเป็น) องค์ประกอบ

ใช้เพื่อส่งพารามิเตอร์ไปยังเทมเพลต

#5)

ระบุค่าสตริง/ข้อความที่เกี่ยวข้องกับนิพจน์ XPath ที่กำหนดในแอตทริบิวต์ @select ตามที่กำหนดไว้ในโค้ดด้านบน

ซึ่งจะให้ค่าของ ชื่อหนังสือ

#6) : การทำซ้ำ

การดำเนินการนี้จะประมวลผลคำสั่งสำหรับแต่ละชุดของโหนด (xpath ที่กำหนดไว้ในแอตทริบิวต์ @select (จำเป็น)) ในลำดับที่จัดเรียง

โค้ดด้านบนหมายถึงชุดโหนดแต่ละชุดของ store/book หมายถึง:

/store/book[1]

/store/book[2 ]

/store/book[3]

สามารถใช้เป็นลูกของ xsl:for-each เพื่อกำหนดลำดับการจัดเรียง

#7) : การประมวลผลแบบมีเงื่อนไข

คำสั่ง xsl:if จะประมวลผลก็ต่อเมื่อค่าบูลีนของแอตทริบิวต์ @test จะเป็นจริงเท่านั้น มิฉะนั้น คำสั่งจะไม่ถูกประเมินและส่งคืนลำดับว่าง

2">  Condition True: Count of books are more than two.  

ผลลัพธ์: เงื่อนไข True: จำนวนหนังสือมีมากกว่าสอง

ในที่นี้ count() คือฟังก์ชันที่กำหนดไว้ล่วงหน้า

#8) :แอตทริบิวต์จำเป็นสำหรับการประเมิน XPath
 

ผลลัพธ์: สิ่งนี้จะคัดลอกโหนดและคุณลักษณะทั้งหมดของเอกสารต้นทางซ้ำไปยังเอกสารเอาต์พุต นั่นคือจะสร้างสำเนาที่แน่นอน ของเอกสารต้นทาง

 

ย่อมาจากสำเนาของโหนดปัจจุบันและแอตทริบิวต์ปัจจุบัน

#11)

องค์ประกอบนี้ใช้เพื่อเขียนความคิดเห็นไปยังเป้าหมาย ผลลัพธ์ เนื้อหาข้อความใดๆ ที่อยู่ด้านข้างแท็กนี้จะถูกพิมพ์เป็นเอาต์พุตความคิดเห็น

สิ่งนี้จะถูกพิมพ์ไปยังเอาต์พุตเป็นโหนดความคิดเห็น

0 ผลลัพธ์:

#12)

สิ่งนี้จะสร้างโหนดข้อความไปยังเอกสารผลลัพธ์ ค่าภายใน xsl:text จะถูกพิมพ์เป็นสตริงเพื่อส่งออก .

นี่คือ

บรรทัดข้อความ

เอาต์พุต:

นี่คือ

บรรทัดข้อความ

#13)

สิ่งนี้จะสร้างองค์ประกอบให้กับเอกสารผลลัพธ์ด้วย ชื่อที่กล่าวถึงในแอตทริบิวต์ @name แอตทริบิวต์ของชื่อเป็นแอตทริบิวต์ที่จำเป็น

 

ผลลัพธ์: 5350192956

#14)

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

       First Book Name:    Second Book Name:     

ผลลัพธ์:

#15)

องค์ประกอบนี้จะจัดเรียงโหนดที่เลือกในลักษณะลำดับตามทิศทางขึ้นหรือลง โหนดหรือ XPath ถูกกำหนดผ่านแอตทริบิวต์ @select และทิศทางของการจัดเรียงถูกกำหนดโดยแอตทริบิวต์ @order

ในรหัสด้านล่าง เราจะได้รับรายการหนังสือทั้งหมดตามชื่อหนังสือตามลำดับตัวอักษร

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition

อ้างอิงภาพหน้าจอนี้สำหรับพื้นที่ที่ไฮไลต์:

ผลลัพธ์: รายการด้านล่างประกอบด้วยชื่อหนังสือ ตามลำดับตัวอักษร เช่น จากน้อยไปหามาก

หนังสือ:

รหัสหนังสือ ชื่อหนังสือ ชื่อผู้แต่ง สำนักพิมพ์ ราคา รุ่น
3741122298 Head First Java Kathy Sierra O 'reilly $19 ที่ 1
9987436700 SQL เอกสารอ้างอิงฉบับสมบูรณ์ James R. Groff McGraw-Hill $45 อันดับ 3
5350192956 ข้อมูลอ้างอิงโปรแกรมเมอร์ XSLT Michael Kay Wrox $40 4th

#16)

องค์ประกอบนี้ประกาศ ตัวแปรที่เก็บค่าในนั้น ตัวแปรอาจเป็นตัวแปรส่วนกลางหรือตัวแปรท้องถิ่น ชื่อของตัวแปรถูกกำหนดโดยแอตทริบิวต์ @name และค่าที่ตัวแปรนี้จะเก็บไว้ถูกกำหนดโดยแอตทริบิวต์ @select

การเข้าถึงตัวแปรโกลบอลเป็นแบบโกลบอล กล่าวคือ ตัวแปรสามารถถูกเรียกภายในค่าใดก็ได้ องค์ประกอบและยังคงสามารถเข้าถึงได้ภายในสไตล์ชีต

ในการกำหนดตัวแปรส่วนกลาง เราเพียงแค่ต้องประกาศว่า ถัดจากองค์ประกอบรูทของสไตล์ชีตตามที่แสดงในโค้ดด้านล่างที่ไฮไลต์ด้วยสีเหลือง ตัวแปร 'SecondBook' คือตัวแปรส่วนกลาง และมีชื่อของหนังสือเล่มที่สอง

การเข้าถึงตัวแปรโลคัลเป็นแบบโลคัลสำหรับองค์ประกอบที่กำหนดไว้ เช่น ตัวแปรนั้นจะไม่สามารถเข้าถึงได้นอกองค์ประกอบที่กำหนดไว้ดังที่แสดงใน โค้ดด้านล่างที่ไฮไลต์เป็นสีเทา ตัวแปร 'หนังสือเล่มแรก' เป็นตัวแปรในเครื่องและเก็บชื่อของหนังสือเล่มแรกไว้

หากต้องการเรียกตัวแปรโกลบอลไปยังตัวแปรโลคัล สัญลักษณ์ดอลลาร์ ($) ใช้นำหน้าชื่อของตัวแปร ดังที่แสดงด้านล่างด้วยสีเหลืองที่ไฮไลต์ $ .

       First Book Name:    Second Book Name:     

อ้างอิงภาพหน้าจอสำหรับพื้นที่ที่ไฮไลต์:

ผลลัพธ์:

ชื่อหนังสือเล่มแรก: การอ้างอิงโปรแกรมเมอร์ XSLT

ชื่อหนังสือเล่มที่สอง: Head First Java

#17)

องค์ประกอบนี้ใช้เพื่อประกาศคีย์ สำหรับค่ารูปแบบที่ตรงกันกับคีย์นั้นๆ

ชื่อคือผู้ให้บริการคีย์นั้นโดยแอตทริบิวต์ @name(" get-publisher “) ซึ่งใช้ภายหลังภายในฟังก์ชัน key() แอตทริบิวต์ @match มีไว้สำหรับโหนดอินพุตดัชนีโดยนิพจน์ XPath (" หนังสือ ") เช่น @match ที่ไฮไลต์สีเหลืองด้านล่างใช้เพื่อจัดทำดัชนีหนังสือทั้งหมดที่มีอยู่ในร้าน

เทียบกับแอตทริบิวต์ @match จะใช้แอตทริบิวต์ @use ซึ่งประกาศโหนดเพื่อรับค่าสำหรับคีย์นั้นผ่านนิพจน์ XPath (“publisher”)

ตอนนี้ สมมติว่า เราต้องการรายละเอียดของหนังสือที่จัดพิมพ์โดยสำนักพิมพ์ 'Wrox' เท่านั้น จากนั้นเราจะได้รับค่านั้นอย่างง่ายดายผ่านองค์ประกอบ xsl:key โดยสร้างคู่คีย์-ค่า

key('get- Publisher', 'Wrox') Key() รับพารามิเตอร์สองตัว ตัวแรกคือชื่อของคีย์ ซึ่งในกรณีนี้คือ 'get-publisher' ตัวที่สองคือค่าสตริงที่ต้องการค้นหา ซึ่งในกรณีของเราคือ 'Wrox'.

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition

อ้างอิงภาพหน้าจอสำหรับพื้นที่ที่ไฮไลต์:

ผลลัพธ์:

Books:-

Book IDBook NameAuthor NamePublisherPriceEdition
5350192956XSLT Programmer's ReferenceMichael KayWrox$404th

ผลลัพธ์ / มุมมอง HTML:

หนังสือ:

รหัสหนังสือ ชื่อหนังสือ ชื่อผู้แต่ง สำนักพิมพ์ ราคา2 รุ่น
5350192956 ข้อมูลอ้างอิงโปรแกรมเมอร์ XSLT Michael Kay Wrox $40 ครั้งที่ 4

#18)

องค์ประกอบนี้ใช้เพื่อวัตถุประสงค์ในการดีบักใน การพัฒนา XSLT องค์ประกอบส่งเอาต์พุตไปยังหน้าจอเอาต์พุตมาตรฐานของแอปพลิเคชัน

แอตทริบิวต์ @terminate ใช้กับค่า 2 ค่า ได้แก่ 'ใช่' หรือ 'ไม่' หากตั้งค่าเป็น 'ใช่' จากนั้นโปรแกรมแยกวิเคราะห์ ยุติทันทีเมื่อเงื่อนไขการทดสอบเป็นไปตามเงื่อนไขสำหรับข้อความที่ต้องการดำเนินการ

เพื่อให้เข้าใจสิ่งนี้ สมมติว่าหากในอินพุตของเราการประมวลผลเงื่อนไขทางเลือก

xsl:choose มีหลายสาเหตุสำหรับเงื่อนไขต่างๆ ที่ทดสอบภายในแอตทริบิวต์ @test ขององค์ประกอบ xsl:when เงื่อนไขการทดสอบที่เป็นจริงก่อนในบรรดา xsl:when ทั้งหมดนั้นจะถูกประมวลผล ก่อนและมีองค์ประกอบทางเลือก xls:otherwise ดังนั้นหากไม่มีการทดสอบเงื่อนไขใดเป็นจริง xsl:มิฉะนั้น จะถูกพิจารณา

  Condition True: Count of book is one.   Condition True: Count of book is two.   Condition True: Count of book is three.   No condition match.  

ผลลัพธ์: เงื่อนไขจริง: จำนวนของ book is three.

#9)

xsl:copy ทำงานกับรายการบริบท เช่น ถ้าเป็นโหนด ก็จะคัดลอกโหนดบริบทไปยังโหนดที่สร้างขึ้นใหม่ และสิ่งนี้จะไม่คัดลอกโหนดย่อย ของโหนดบริบท เพราะเหตุนี้ นี้จึงเรียกว่าสำเนาตื้น. xsl:copy-of ซึ่งแตกต่างจากองค์ประกอบ xsl:copy ไม่มีแอตทริบิวต์ @select

ในโค้ดด้านล่าง รายการบริบทจะถูกคัดลอกไปยังเอาต์พุต & รายการเด็กทั้งหมดเรียกว่า & คัดลอกโดย xsl:apply-template recursively.

node()

เลื่อนขึ้นไปด้านบน