HotScripts.pl - darmowe programy, skrypty  

Wróć   HotScripts.pl - darmowe programy, skrypty > Grupy dyskusyjne > pl.comp > pl.comp.xml

Odpowiedz
 
LinkBack Narzędzia wątku Wygląd
  #1 (permalink)  
Stary 13-03-2006, 11:53
godan
Guest
 
Postów: n/a
Domyślnie Evaluate XSL

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

Reply With Quote
  #2 (permalink)  
Stary 13-03-2006, 11:53
szomiz
Guest
 
Postów: n/a
Domyślnie Re: Evaluate XSL

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.


Reply With Quote
  #3 (permalink)  
Stary 13-03-2006, 11:53
godan
Guest
 
Postów: n/a
Domyślnie Re: Evaluate XSL

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).

Reply With Quote
  #4 (permalink)  
Stary 13-03-2006, 11:53
szomiz
Guest
 
Postów: n/a
Domyślnie Re: Evaluate XSL

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.


Reply With Quote
  #5 (permalink)  
Stary 13-03-2006, 11:53
godan
Guest
 
Postów: n/a
Domyślnie Re: Evaluate XSL

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.

Reply With Quote
  #6 (permalink)  
Stary 13-03-2006, 11:53
szomiz
Guest
 
Postów: n/a
Domyślnie Re: Evaluate XSL

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.


Reply With Quote
  #7 (permalink)  
Stary 13-03-2006, 11:53
szomiz
Guest
 
Postów: n/a
Domyślnie Re: Evaluate XSL

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">
<xslaram 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.


Reply With Quote
Odpowiedz


Użytkownicy aktualnie czytający ten wątek: 1 (0 użytkownik i 1 gości)
 
Narzędzia wątku
Wygląd

Zasady Postowania
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Włączony
UśmieszkiWłączony
[IMG] kod jest Wyłączony
HTML kod jest Wyłączony
Trackbacks are Włączony
Pingbacks are Włączony
Refbacks are Włączony


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


Czasy w strefie GMT +1. Teraz jest 03:52.


Oprogramowanie Forum: vBulletin 3.8.0
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0