- Уводзіны ў XSLT
- Books:-
- Books:-
- List of Books Name :-
- List of Books Name :-
- Conclusion
- Books:-
- Books:-
- Books:-
- Books:-
- Books:-
- Books:-
- Books:-
Гэты падручнік тлумачыць, што такое 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:
SQL The Complete Reference James R. Groff McGraw-Hill 3rd
Глядзіце скрыншот для выдзеленай вобласці:
Код XSLT:
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
Глядзіце скрыншот для выдзеленай вобласці:
Вынік: Звярніце ўвагу, што як толькі аналізатар сустракае пусты цэннік, ён неадкладна спыняе апрацоўку, з-за якой зачыняюць тэгі , і не з'яўляюцца ў канцы файла.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
5350192956 | XSLT Programmer's Reference | Michael Kay | Wrox | $40 | 4th |
3741122298 | Head First Java | Kathy Sierra | O'reilly | $19 | 1st |
Глядзіце скрыншот для вылучанай вобласці:
#19) & Элемент
вызначае параметр шаблона, калі ён вызначаны ўнутры. Яно можа быць вызначана альбо ўнутры як глабальны параметр, альбо ўнутры як лакальны параметр гэтага шаблону.
Значэнне перадаецца/падаецца, калі шаблон выклікаецца праз або .
ён перадае значэнне параметра, вызначанага ўнутры у шаблон. Такі атрыбут, як @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:
Глядзіце скрыншот для выдзеленай вобласці:
Вынік:
навучальныя мэты).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 ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
#3) Код выніку / вываду
Ніжэйпрыведзены код будзе створаны пасля выкарыстання кода XSLT у прыведзеным вышэй XML-дакуменце.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
5350192956 | XSLT Programmer's Reference | Michael Kay | Wrox | $40 | 4th |
3741122298 | Head First Java | Kathy Sierra | O'reilly | $19 | 1st |
9987436700 | SQL The Complete Reference | James R. Groff | McGraw-Hill | $45 | 3rd |
# 4) Праглядзець вынік / вывад у вэб-браўзеры
Кнігі:
Ідэнтыфікатар кнігі | Назва кнігі | Імя аўтара | Выдавец | Кошт | Выданне |
---|---|---|---|---|---|
5350192956 | Даведка праграміста XSLT | Майкл Кэй | Врокс | $40 | 4th |
3741122298 | Head First Java | Кэці Сіера | O'reilly | $19 | 1st |
9987436700 | SQL Поўны даведнік | Джэймс Р. Гроф | McGraw-Hill | $45 | 3rd |
Элементы XSLT
Каб зразумець вышэйсказанае Код XSLT і яго праца, спачатку нам трэба зразумець розныя элементы XSLT і іх атрыбуты.
#1) АБО
Кожны код XSLT павінен пачынацца з каранёвага элемента або
Атрыбуты:
- @xmlns:xsl: Злучае дакумент XSLT са стандартам XSLT.
- @version: Вызначае версію кода XSLT дляаналізатар.
#2)
Гэтая дэкларацыя вызначае набор правілаў, якія прымяняюцца для апрацоўкі або пераўтварэння выбранага ўваходнага элемента зыходнага дакумента ў вызначаныя правілы мэтавага элемента выходных дакументаў .
У асноўным даступныя два тыпы шаблонаў у залежнасці ад іх атрыбутаў:
(i) Іменны шаблон: Калі элемент шаблону xsl: змяшчае атрыбут @name, то гэта называецца шаблонам з назвай.
Шаблон з назвай выклікаецца элементам xsl:call-template.
(ii) Шаблон супадзення: Элемент xsl:template утрымлівае атрыбут @match, які змяшчае адпаведны шаблон або XPath, прыменены да вузлоў уводу.
Шаблоны Match выклікаюцца элементам xsl:apply-template.
xsl Элемент :template павінен мець атрыбут @match або @name або абодва. Элемент xsl:template, які не мае атрыбута match, не павінен мець атрыбута mode і priority.
Давайце перапішам прыведзены вышэй XSLT(
a) Код XSLT на аснове шаблона супадзення з . Глядзіце ніжэй жоўты & шэрым колерам вылучаны зменены код, ён дасць той самы вынік, паказаны вышэй.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|
Глядзіце скрыншот для выдзеленай вобласці:
b) Код XSLT на аснове названага шаблону з . Глядзіце ніжэй жоўты & шэрым колерам выдзелены зменены код, ён дасць той самы вынік, паказаны вышэй.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|
Глядзіце скрыншот для вылучэннявобласць:
#3)
Працэсар знойдзе і ўжыве ўсе шаблоны, якія маюць XPath, вызначаны ў атрыбуты @select.
Атрыбут @mode таксама выкарыстоўваецца, калі мы хочам даць больш чым адзін спосаб вываду з аднолькавым зместам уводу.
#4)
Працэсар будзе выклікаць шаблоны, якія маюць значэнне ўнутры атрыбута @name (абавязковы). Элемент
выкарыстоўваецца для перадачы параметраў у шаблон.
#5)
Увядзіце радковае/тэкставае значэнне адносна выразу XPath, вызначанага ў атрыбуты @select, як вызначана ў прыведзеным вышэй кодзе.
Гэта дасць значэнне назву кнігі.
#6) : Паўтарэнне
Гэта апрацуе інструкцыі для кожнага набору вузлоў (xpath, вызначаны ў атрыбуты @select (абавязковы)) у адсартаванай паслядоўнасці.
Вышэйпрыведзены код азначае для кожнага вузла набор крамы/кнігі:
/крама/кніга[1]
/крама/кніга[2 ]
/store/book[3]
можа таксама выкарыстоўвацца ў якасці даччынага элемента xsl:for-each для вызначэння парадку сартавання.
#7) : Умоўная апрацоўка
Інструкцыі xsl:if будуць апрацоўвацца толькі ў тым выпадку, калі лагічнае значэнне атрыбуту @test будзе праўдай, у адваротным выпадку інструкцыя не будзе ацэненая і вернецца пустая паслядоўнасць.
2"> Condition True: Count of books are more than two.
Вынік: Умова праўдзівая: колькасць кніг больш за дзве.
Тут count() з'яўляецца прадвызначанай функцыяй.
#8) :атрыбут патрабуецца для ацэнкі XPath.
Вынік: Гэта будзе рэкурсіўна скапіяваць усе вузлы і атрыбуты зыходнага дакумента ў выходны дакумент, г.зн. створыць дакладную копію зыходнага дакумента.
Абазначае копію бягучага вузла і бягучага атрыбута.
#11)
Гэты элемент выкарыстоўваецца для напісання каментарыя да мэты у выніку любое тэкставае змесціва, якое знаходзіцца побач з гэтым тэгам, будзе надрукавана як каментарый.
Гэта будзе надрукавана для вываду як каментарый.
Вынік:
#12)
Гэта створыць тэкставы вузел у выніковым дакуменце, значэнне ўнутры xsl:text будзе надрукавана як радок для вываду .
Гэта
тэкставы радок.
Вывад:
Гэта
тэкставы радок.
#13)
Гэта створыць элемент выніковага дакумента з імя, згаданае ў атрыбуце @name. Атрыбут name з'яўляецца абавязковым атрыбутам.
Вынік: 5350192956
#14)
Гэта прывядзе да стварэння атрыбута для яго бацькоўскага элемента ў выніковым дакуменце. Імя атрыбута вызначаецца атрыбутам name, а значэнне атрыбута вылічваецца XPath, згаданым у атрыбуты select, як паказана ў кодзе ніжэй. Атрыбут name з'яўляецца абавязковым.
Вынік:
#15)
Гэты элемент будзе сартавацьабраны вузел у парадку паслядоўнасці адпаведна ў напрамку ўзрастання або змяншэння. Вузел або XPath задаецца праз атрыбут @select, а кірунак сартавання вызначаецца атрыбутам @order.
У прыведзеным ніжэй кодзе мы атрымаем спіс усіх кніг у адпаведнасці з назвай кнігі ў алфавітным парадку.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
Звярніцеся да гэтага здымка экрана, каб убачыць выдзеленую вобласць:
Вынік: У спісе ніжэй ёсць назвы кніг у алфавітным парадку, гэта значыць у парадку ўзрастання.
Кнігі:
Ідэнтыфікатар кнігі | Назва кнігі | Імя аўтара | Выдавец | Кошт | Выданне |
---|---|---|---|---|---|
3741122298 | Head First Java | Кэці Сіера | O 'reilly | $19 | 1st |
9987436700 | SQL Поўны даведнік | Джэймс Р. Гроф | McGraw-Hill | $45 | 3rd |
5350192956 | Даведка праграміста XSLT | Michael Kay | Wrox | $40 | 4th |
#16)
Гэты элемент дэкларуе зменная, якая змяшчае значэнне. Пераменная можа быць глабальнай або лакальнай зменнай. Імя зменнай вызначаецца атрыбутам @name, а значэнне, якое будзе ўтрымліваць гэтая зменная, вызначаецца атрыбутам @select.
Доступ да глабальнай зменнай з'яўляецца глабальным, г.зн. зменныя можна выклікаць у любым элемент і застаюцца даступныміу табліцы стыляў.
Каб вызначыць глабальную зменную, нам проста трэба аб'явіць, што побач з каранёвым элементам табліцы стыляў, як паказана ў кодзе ніжэй, вылучаным жоўтым колерам, зменная 'SecondBook' з'яўляецца глабальнай зменнай і яна змяшчае імя другой кнігі.
Доступ лакальнай зменнай з'яўляецца лакальным для элемента, у якім яна вызначана, г.зн. гэтая зменная не будзе даступная па-за элементам, у якім яна вызначана, як паказана ў у кодзе ніжэй, які вылучаны шэрым колерам, зменная 'first book' з'яўляецца лакальнай зменнай і змяшчае назву першай кнігі.
Каб зрабіць выклік глабальнай зменнай лакальнай зменнай, сімвал даляра ($) выкарыстоўваецца перад імем зменнай, як паказана ніжэй у жоўтым колеры $ .
First Book Name: Second Book Name:
Глядзіце скрыншот для выдзеленай вобласці:
Вынік:
Назва першай кнігі: XSLT Programmer's Reference
Назва другой кнігі: Head First Java
#17)
Гэты элемент выкарыстоўваецца для аб'явы ключоў для значэнняў шаблону, якія адпавядаюць гэтаму канкрэтнаму ключу.
Name з'яўляецца пастаўшчыком гэтага ключа праз атрыбут @name(“ get-publisher “), які пазней выкарыстоўваецца ўнутры функцыі key(). Атрыбут @match прадастаўляецца для індэксацыі вузла ўводу з дапамогай выразаў XPath (“ кніга “), як у ніжэй выдзеленым жоўтым колерам @match выкарыстоўваецца для індэксацыі ўсіх кніг, даступных у краме.
Адносна@match атрыбут, выкарыстоўваецца атрыбут @use, ён абвяшчае вузел, каб атрымаць значэнне для гэтага ключа праз XPath выраз (“выдавец”).
Цяпер выкажам здагадку, што калі нам патрэбны падрабязныя звесткі пра кнігу, якая выдадзена толькі выдавецтвам Wrox, тады мы можам лёгка атрымаць гэта значэнне праз элемент xsl:key, стварыўшы пару ключ-значэнне.
key('get- publisher', 'Wrox') Key() прымае два параметры, першы - гэта імя ключа, які ў дадзеным выпадку з'яўляецца "get-publisher", другі - гэта радковае значэнне, якое трэба шукаць, якое ў нашым выпадку 'Wrox'.
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
Глядзіце скрыншот для выдзеленай вобласці:
Вынік:
Books:-
Book ID | Book Name | Author Name | Publisher | Price | Edition |
---|---|---|---|---|---|
5350192956 | XSLT Programmer's Reference | Michael Kay | Wrox | $40 | 4th |
Вынік/Прагляд HTML:
Кнігі:
Ідэнтыфікатар кнігі | Назва кнігі | Імя аўтара | Выдавец | Кошт | Выданне |
---|---|---|---|---|---|
5350192956 | Даведка праграміста XSLT | Майкл Кэй | Wrox | $40 | 4th |
#18)
Гэты элемент выкарыстоўваецца для адладкі ў Распрацоўка XSLT. Элемент дае вывад на стандартны экран вываду прыкладання.
Атрыбут @terminate выкарыстоўваецца з двума значэннямі: «так» або «не», калі значэнне ўсталявана ў «так», то аналізатар спыняецца неадкладна, як толькі выконваецца ўмова праверкі для выканання паведамлення.
Каб зразумець гэта, выкажам здагадку, што ў нашых уваходных дадзеныхАльтэрнатыўная апрацоўка ўмоў
xsl:choose мае некалькі прычын для розных умоў, якія правяраюцца ўнутры атрыбута @test элементаў xsl:when, тэставая ўмова, якая выконваецца першай сярод усіх xsl:when, якія будуць апрацаваны першы і ёсць неабавязковы элемент xls:otherwise, таму, калі ніводны з тэстаў умоў не спраўджваецца, гэты xsl:otherwise будзе разглядацца.
Condition True: Count of book is one. Condition True: Count of book is two. Condition True: Count of book is three. No condition match.
Вынік: Умова праўдзівая: колькасць кніга тры.
#9)
xsl:copy працуе з кантэкстным элементам, г.зн. калі гэта вузел, то ён будзе скапіяваць кантэкстны вузел у нядаўна згенераваны вузел, і гэта не будзе капіраваць даччыныя элементы кантэкстнага вузла. Па гэтай прычыне гэта называецца неглыбокай копіяй. У адрозненне ад элемента xsl:copy-of, xsl:copy не мае атрыбуту @select.
У прыведзеным ніжэй кодзе кантэкстныя элементы капіююцца ў выхад & усе даччыныя элементы называюцца & скапіраваны xsl:apply-template рэкурсіўна.
node()