Udf-da o'zgaruvchining qiymatini yo'l-chaqiruv talab qiladigan qilib belgilash

XSLT da ma'lum bir funktsiyani qayta-qayta chaqiradigan foydalanuvchi tomonidan belgilangan funktsiyadan foydalanishga harakat qilaman. Ushbu magistral XPath ifodasi natijasiga asoslangan bo'lib, u bitta funktsiya chaqiruvi oralig'ida o'zgarmaydi. Men buni o'z-o'zidan o'zgartirib turishdan ko'ra, uni boshqalarga berishni yaxshi deb o'ylardim.

Afsuski, kamida Saxonning amalga oshirilishida, funksiya ichidagi tugunni talab qiladigan XPath ifodasini ishlatishingiz ham mumkin, bu funksiya, hatto mutlaq yo'lga asoslangan holda, birinchi marta sizning vazifangizni ildiz hujjatini emas boshqa biri.

Misol uchun, quyidagi kod xato keltirib chiqaradi:




Odatda, yechim faqat kontekstni berish uchun har qanday global o'zgaruvchini chaqirishdir. Misol uchun, udf ichida ishlaydi ($ root ildiz tugun bilan identifikatsiya qilingan o'zgaruvchidir):




Lekin, bu o'zgaruvchining qiymatini aniqlash uchun Xpath-dan foydalanishga harakat qilmaydi, chunki men har bir forma ichidagi ifodani kiritishga ruxsat berilmaydi.

Men ham foydalanishga urindim


to give it context, going on what I saw here:http://www.stylusstudio.com/xsllist/200504/post00240.html

Bu ham ishlamadi.

FWIW o'zgaruvchining funktsiyaga o'tishini muammoli qiladi, chunki "myleaf" ni belgilashda ishlatiladigan Xpath iborasi kontekstli tugunga bog'liq va Xpathni joriy kontekstli tugmachalardan qadriyatlarga asoslangan holda bir yo'lni chaqirishni bilmayman.

Masalan, ushbu funktsiyani chaqiradigan kodda quyidagi kabi narsalar mavjud:




Men/kartoshka/ildiz [ko'z] tugunlari doirasida ishlayapman va @sessionID qiymatiga ega bo'lgan/kartoshka/tayoq [scc] tugunini izlash uchun udf dan foydalanib. xml dovrug'ining butunlay boshqa bir qismida boshqa tugunlarni qidirish uchun XPathning boshlang'ichidagi joriy kontekstli tugmachadan @sessionID qiymatiga qanday murojaat qilishni bilmayman, shuning uchun udf ni ishlatmoqdaman. Men protsessor har gal yuqoriga qarashni emas, balki mag'lubiyat uchun o'zgarmaydiganni ishlatishga qaror qilguncha yaxshi ishladi.

Men bir darajaga chuqurroq borishdan qochmoqchi bo'lgan edim (mening vazifam nomlangan shablonni chaqirgan yoki o'zimning asl ismimga nomlangan shablonni qo'ygan va ushbu shablonni funktsiya deb atagan).

Mening savolim shunday:

A foydalanuvchi belgilaydigan funksiya uchun XPath ifodasiga bog'liq bo'lgan o'zgaruvchini qanday o'rnatishim mumkin?

B. Xpath-da, siz test qilmoqchi bo'lgan Xpath ifodasining predikatlaridagi joriy kontent tugunidan olingan qadriyatlardan foydalanish uchun snazzy usul bormi?

0
Mavjud tugun bilan bog'liq atributlarni (masalan, har bir satrda aytmoqchi bo'lgan) XPath ifodasida boshqasini qidirib topish bilan bog'liq masalaga alohida e'tibor qaratish bilan bog'liq XML-ga misol keltirdim. Ushbu savol shu erda bog'lanish
qo'shib qo'ydi muallif David R, manba
@_David R: Afsuski, savolni tushunish qiyin. Iltimos, savolni tahrirlang va to'liq (qisqa, ammo qisqa) misol keltiring, shunday qilib u takrorlanishi mumkin? Bundan tashqari, iltimos, nima qilishni xohlayotganingizni ayting. Shuningdek, iltimos, mos keladigan (iloji boricha qisqa) to'la manba xml hujjatini taqdim eting. Ayniqsa, "o'zgaruvchining qiymatini aniqlash uchun Xpathni ishlatishga harakat" ning ma'nosi nima?
qo'shib qo'ydi muallif Dimitre Novatchev, manba
@_David R: Rahmat, men yangi savolga javob berdim.
qo'shib qo'ydi muallif Dimitre Novatchev, manba

1 javoblar

Mening savolim shunday:

     

A. Foydalanuvchi tomonidan belgilangan funktsiyalar uchun, qanday bog'liq bo'lgan o'zgaruvchini qanday qilib qo'yaman   XPath ifodasida?

     

B. Xpath-dan oqimdan foydalanilgan qiymatlarni ishlatish uchun snazzy usul bormi?   siz urinayotgan Xpath iborasining asosidagi tarkibiy tugunni   sinov uchun?

Har ikkala savol ham aniq emas.

Javob: Sizga shuni nazarda tutyapman:

" Xsl: funktsiyasi ichida tagiga qaram bo'lgan o'zgaruvchini qanday aniqlash mumkin?   kontekstli tugunmi? ".

The answer: You can't. By definition there is no context node within an xsl:function. This is defined by the W3C XSLT 2.0 specification in the following way:

" Bir stil sahifasi funktsiyasi tanasi ichida birinchi navbatda   aniqlanmagan; Bu kontekst elementiga havola etishning har qanday urinishi,   kontekst pozitsiyasi yoki kontekst hajmi - qaytarib olinadigan dinamik xato.   [XPDY0002] "

Shu bilan birga, siz mo'ljallangan kontekstli tugma (yoki joriy sifatida ishlatilishi kerak bo'lgan hujjat tuguniga) parametr sifatida o'tishingiz mumkin. Yoki, muqobil ravishda siz global miqyosda belgilangan o'zgaruvchiga murojaat qilishingiz mumkin.

B: Bu savol to'liq tushunarsiz:

  1. "Snazzy" nima?

  2. "Hozirgi kontent nodu" nima?

0
qo'shib qo'ydi
Birinchi savolga javob berganingiz uchun tashakkur. Ikkinchisiga mening talabimni yozib olish bilan bog'liq tafsilotlar shu erda: Bu savol shu erda: havolasi
qo'shib qo'ydi muallif David R, manba