![]() |
|
|||
|
Witam mam problem, ktory moge rozwiazac przy uzyciu XALAN'a, ale moze
ktos zna rozwiazanie bez uzycia xalana. Problem polega na pobraniu z atrybutu @sciezka jego zawartosci(sciazka xpath) i na podstawiw tej sciezki wyliczyc nowy element(jego wartosc) z tego samego xml'a. Problem w tym ze jak zrobie zmienna na ktora przypisze pobrana sciazke to jest ona interpretowana jako string a nie evaluowana jako xpath. XML: <?xml version="1.0" encoding="UTF-8"?> <zawiadomienie> <form_data> <imie>Konrad</imie> <imie2>Marcin</imie2> </form_data> <print_template> <imie1 sciezka="//zawiadomienie/form_data/imie"></imie1> </print_template> </zawiadomienie> XSL: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo" xmlns:xalan="http://xml.apache.org/xalan"> <xsl:template match="/"> <xsl:variable name="sciezka1" select="/zawiadomienie/print_template/imie1/@sciezka" /> 1.<a href="{$sciezka1}"></a><BR/> <xsl:variable name="wartosc1" select="xalan:evaluate($sciezka1)" /> 2.<a href="{$wartosc1}"></a><BR/> <xsl:variable name="wartosc2" select="$sciezka1" /> 3.<xsl:value-of select="$wartosc2" /><BR/> </xsl:template> </xsl:stylesheet> Problem polega na tym ze wartosc1 jest liczona dobrze(xalan:evaluate) a wartosc2 jest nadal tym ciagiem znakow pobranym z atrybutu @sciezka,a nie wyliczonym nowym elementem. Prosze o jakies sugestie. dzieki |
|
|||
|
Uzytkownik "godan" <godan@op.pl> napisal w wiadomosci
news:1141731814.304658.259400@p10g2000cwp.googlegr oups.com... > <xsl:variable name="sciezka1" > select="/zawiadomienie/print_template/imie1/@sciezka" /> > 1.<a href="{$sciezka1}"></a><BR/> > <xsl:variable name="wartosc1" select="xalan:evaluate($sciezka1)" /> > 2.<a href="{$wartosc1}"></a><BR/> > <xsl:variable name="wartosc2" select="$sciezka1" /> > 3.<xsl:value-of select="$wartosc2" /><BR/> > </xsl:template> > </xsl:stylesheet> > > Problem polega na tym ze wartosc1 jest liczona dobrze(xalan:evaluate) a > wartosc2 jest nadal tym ciagiem znakow pobranym z atrybutu @sciezka,a > nie wyliczonym nowym elementem. > > Prosze o jakies sugestie. <xsl:variable name="sciezka1" select="/zawiadomienie/print_template/imie1/@sciezka" /> To nie to samo co: <xsl:variable name="sciezka1" select="'/zawiadomienie/print_template/imie1/@sciezka'" /> Ktore z kolei jest tym samym co: <xsl:variable name="sciezka1">/zawiadomienie/print_template/imie1/@sciezka</xsl:variable> A wogole to co tak na prawde chcesz osiagnac (i dlaczego w tak pokretny sposob;-)? sz. |
|
|||
|
co chce osiagnac?
ano to ze znam xpathy do elementow w danym xml, ale tam gdzie wskazuje ten xpath jest zapisany tekst ktory jest xpathem do tego co potrzebuje. Czyli w tym przykladzie znam tylko to: /zawiadomienie/print_template/imie1/@sciezka a musze miec to co wskazuje xpath umiessczony wlasnie tam(wskalzuje na cos w tym samym xml'u). |
|
|||
|
Uzytkownik "godan" <godan@op.pl> napisal w wiadomosci
news:1141829871.738386.17580@v46g2000cwv.googlegro ups.com... > co chce osiagnac? > > ano to ze znam xpathy do elementow w danym xml, ale tam gdzie wskazuje > ten xpath jest zapisany tekst ktory jest xpathem do tego co potrzebuje. Prywatnie jestem wrogiem rozszerzen standardow (no chyba, ze sam rozszerzam :-). W jednym dokumnecie/transformacji ile masz takich przypadkow? Bo jezeli male-kilka to mozna przeciez transformowac konkretne wezly. A jezeli wiecej to sciezka jak w przykladzie jest do dupy bo zasadniczo wezly moga sie powtarzac... sz. |
|
|||
|
Uzytkownik "godan" <godan@op.pl> napisal w wiadomosci
news:1141893349.749550.234810@p10g2000cwp.googlegr oups.com... > dzieki za odpowiedz, > wiem ze w przytoczonym przykladzie moga sie powatrzac nody, ale mnie > chodzi o to jak zrobic ten efekt (xalan:evaluate()) bez jego uzycia > tj. xalana. Oj bylo, i to chyba kilka razy. Automagicznie wezlow spelniajacych warunek sciezki nie wybierzesz. Musisz przejsc przez wszystkie, dla kazdego ustalic sciezke i sprawdzac czy jest taka jak cie interesuje. <xsl:variable name="path"> <xsl:for-each select="ancestor-or-self::*"> <xsl:text>/<xsl:text> <xsl:value-of select="name()"/> </xsl:for-each> </xsl:variable> <xsl:if test="$path=/*/@path"> .... Ewentualnie przekazywac sciezke jako parametr miedzy wolaniami i doklejac ostatni element. sz. |
|
|||
|
Uzytkownik "godan" <godan@op.pl> napisal w wiadomosci
news:1141893349.749550.234810@p10g2000cwp.googlegr oups.com... > dzieki za odpowiedz, > wiem ze w przytoczonym przykladzie moga sie powatrzac nody, ale mnie > chodzi o to jak zrobic ten efekt (xalan:evaluate()) bez jego uzycia No chyba, ze cos a'la apply takiej (prostej!) sciezki cie interesuje. Wtedy: <xsl:apply-templates select="." mode="eval"> <xsl:with-param name="path" select="path"/> <xsl:template match="*" mode="eval"> <xsl aram name="path"/><xsl:variable name="loc" select="substring-after($path,'/')"/> <xsl:choose> <xsl:when test="contains($loc,'/')"> <xsl:apply-templates select="*[name()=substring-before($loc,'/')]" mode="eval"> <xsl:with-param name="path" select="concat('/',substring-after($loc,'/')"/> <xsl:apply-templates/> </xsl:when> <xsl:otherwise> <!--doszlismy do szukanego wezla! --> <xsl:otherwise> Czy jakos tak - nie mam czasu teraz sprawdzac. Plus poprawki na atrybuty. sz. |
|
|||
|
|
![]() |
| Użytkownicy aktualnie czytający ten wątek: 1 (0 użytkownik i 1 gości) | |
| Narzędzia wątku | |
| Wygląd | |
|
|
Podobne wątki
|
||||
| Wątek | Autor wątku | Forum | Odpowiedzi | Ostatni Post |
| Re: C++ Kalkulator w Notacji Polskiej | Maciej Sobczak | pl.comp.programming | 6 | 29-11-2005 10:16 |