recuperer un attribut d'un noeud sans child - XML/XSL - Programmation
Marsh Posté le 20-11-2003 à 16:31:31
PETOZAK a écrit : Bonjour, |
c'est quoi ton 'carrier' ?
Marsh Posté le 21-11-2003 à 09:52:08
au fait il faut corriger :select="./REQUEST/QUERY[@CodeSender]"
Marsh Posté le 21-11-2003 à 10:37:24
et si tu fais ?
Code :
|
un truc dans le genre...
Marsh Posté le 21-11-2003 à 16:45:18
PETOZAK a écrit : Bonjour, |
quel attribut veux tu récupérer, y en a plusieurs, en plus, c'est faux, ta condition Xpath [@carrierCodeSender] n'existe pas, ca doit être [@CodeSender], en plus, ici, ca ne te retournerai pas un attribut, mais le noeud QUERY...
Finalement, il faut savoir de quel noeud tu extrait ce morceau XSL...
colle le code complet, ou au moins, le sous ensemble <xsl:apply-templates...>
Marsh Posté le 24-11-2003 à 11:02:53
au fait mon XML est simple pour QUERY il n'y a qu'un noueud de ce type et je pense pas que le fqit qui y 'ait plusieurs attribut soit un prob, non?
je te colle le XSL:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
>
<xsl:output method="html"/>
<xsl:template match="/">
<HTML>
<HEAD>
<LINK HREF="./css/1aintranets.css" TYPE="text/css" REL="stylesheet"/>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript" SRC="./js/check.js"></SCRIPT>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript" SRC="./js/Display_Control.js"></SCRIPT>
</HEAD>
<body>
<FORM Action="History.jsp" method="POST">
<TABLE width="630" height="49" border="0" rules="groups">
<TR class="InterfaceHeader">
<TD width="131" ><font class="InterfaceHeader_SubText">From</font></TD>
<TD width="131" ><font class="InterfaceHeader_SubText">To</font></TD>
<TD width="79" ><font class="InterfaceHeader_SubText">Sort by</font></TD>
<TD colspan="2" ><font class="InterfaceHeader_SubText">Sort Order </font></TD>
</TR>
<TR valign="top">
<TD height="28" valign="top" >
<table width="98" border="0" cellpadding="0" cellspacing="0">
<tr valign="baseline">
<td width="50" height="25"> <input name="frm" class="tf_normal" style="WIDTH: 77px; "><xsl:attribute name="value">toto<xsl:value-of select="./REQUEST/QUERY[@carrierCodeSender]"/></xsl:attribute></input></td>
<td width="57"><button class="CalButton" onClick="ShowCalendar(IndexVal)" IndexVal="frm"/></td>
</tr>
</table></TD>
<TD valign="top" > <table width="98" border="0" cellpadding="0" cellspacing="0">
<tr valign="baseline">
<td width="50"><input name="to" class="tf_normal" style="WIDTH: 77px; " /></td>
<td width="57"><button class="CalButton" onClick="ShowCalendar(IndexVal)" IndexVal="to" /></td>
</tr>
</table></TD>
<TD > <select style="WIDTH: 79px" name="Sorttype">
<option value="T_IN" selected="true">Date</option>
<option value="REQUESTER">Airline</option>
<option value="USER_ID">User</option>
<option value="MSG_TYPE">Message</option>
<option value="UPD_TYPE">Type</option>
<option value="FLIGHT">Flight</option>
<option value="Res">Response</option>
</select></TD>
<TD width="92" ><font class="InterfaceHeader_SubText">
<INPUT type="radio" value="asc" name="ASCDESC" checked="true"/>
Ascending</font></TD>
<TD width="108" > <INPUT type="radio" value="desc" name="ASCDESC"/> <font class="InterfaceHeader_SubText">Descending</font></TD>
<TD width="53"><button type="submit" id="New" class="InterfaceButton"><img src="img/validation_ic_18a.png" width="18" height="18" align="left"/>Apply</button></TD>
</TR>
</TABLE>
</FORM>
<TABLE width="61%" height="31" border="0">
<TR class="InterfaceHeader" bgcolor="#99CCFF">
<TD ><font class="InterfaceHeader_SubText" >Date</font></TD>
<TD><font class="InterfaceHeader_SubText" >Hour</font></TD>
<TD><font class="InterfaceHeader_SubText" >A/L</font></TD>
<TD><font class="InterfaceHeader_SubText">User-ID</font></TD>
<TD><font class="InterfaceHeader_SubText">Message</font></TD>
<TD><font class="InterfaceHeader_SubText">Type</font></TD>
<TD><font class="InterfaceHeader_SubText">Flight</font></TD>
<TD><font class="InterfaceHeader_SubText">MessageSSIM</font></TD>
<TD><font class="InterfaceHeader_SubText">Response</font></TD>
</TR>
<xsl:apply-templates/>
</TABLE>
<TABLE width="404" height="73" cellPadding="20" cellSpacing="0" id="Button_Group">
<TR>
<TD width="25%" ><button type="submit" id="ReUse" class="InterfaceButton"><img src="img/redo_ic_18a.png" width="18" height="18" align="left"/>Re-Use</button></TD>
<TD width="25%"><button type="submit" id="Print" class="InterfaceButton"><img src="img/print_ic_18b.png" width="18" height="18" align="left"/>Print</button></TD>
<TD width="25%"><button class="InterfaceButton" type="submit" id="New"><img src="img/clear_ic_18a.png" width="18" height="18" align="left"/>Clear</button></TD>
<td width="25%"><button class="InterfaceButton" type="submit" id="New"><img src="img/help.gif" width="18" height="18" align="left"/>Help</button></td>
</TR>
</TABLE>
</body>
</HTML>
</xsl:template>
<xsl:template match="ROW">
<TR>
<xsl:if test="position() mod 2 = 0">
<xsl:attribute name="class">InterfaceHeader2</xsl:attribute>
</xsl:if>
<xsl:for-each select="./.">
<TD><xsl:value-of select="T_IN"/></TD>
<TD><xsl:value-of select="T_IN"/></TD>
<TD><xsl:value-of select="REQUESTER"/></TD>
<TD><xsl:value-of select="USER_ID"/></TD>
<TD><xsl:value-of select="MSG_TYPE"/></TD>
<TD><xsl:value-of select="UPD_TYPE"/></TD>
<TD><xsl:value-of select="CARRIER"/><xsl:value-of select="FLIGHT"/></TD>
<TD><A style="CURSOR: hand" href="#" class="dfont">See complete</A></TD>
<TD><xsl:value-of select="RES"/></TD>
</xsl:for-each>
</TR>
</xsl:template>
<xsl:template>
coucou
</xsl:template>
</xsl:stylesheet>
Marsh Posté le 24-11-2003 à 11:04:25
mon XML ressemble a ca :
<REQUEST>
<QUERY AscDesc="desc" SortType="MSG_TYPE" CodeSender="U" endDate="02AUG03" startDate="01AUG02">
<ENDDATE>02AUG03</ENDDATE>
</QUERY>
<RESULTSET>
<ROW></ROW>
<ROW></ROW>
<ROW></ROW>
<ROW></ROW>
..
...
....
<ROW></ROW>
</RESULTSET>
</REQUEST>
Marsh Posté le 24-11-2003 à 11:25:51
PETOZAK a écrit : mon XML ressemble a ca : |
ben tu dis que tu veux récupérer l'attribut...
Or, dans le noeud QUERY, AscDesc, SortType, CodeSender,endDate, startDate sont des Attributs...
Mais peut être est ce la valeur du neoeud ENDDATE que tu veux récupérer ???
ton XSL, c'est normal qu'il ramène rien puisque le QUERY n'a pas de valeur
Marsh Posté le 24-11-2003 à 14:07:01
au fait chocoboy le prob est super simple :recuperer la valeur d'un attribut
<REQUEST>
<QUERY AscDesc="desc" SortType="MSG_TYPE" CodeSender="U" endDate="02AUG03" startDate="01AUG02">
</QUERY>
</REQUEST>
Voila le bon XML (endDate c t pour voir si il recuperer le noeud et oui il le fait bien mais ce que je veux c alleger mon XML en recuperant les attributs)
Marsh Posté le 24-11-2003 à 14:08:06
et tu pense que c'est bon ca?:
<QUERY AscDesc="desc" SortType="MSG_TYPE" CodeSender="U" endDate="02AUG03" startDate="01AUG02"/>
Marsh Posté le 24-11-2003 à 14:16:23
oui mais ca donne ca:
<INPUT name="frm" class="tf_normal" width="77px" value="REQUEST/QUERY[@CodeSender]">
ce qui est pas bon
Marsh Posté le 24-11-2003 à 14:17:17
ce qui faut c ca:
<INPUT name="frm" class="tf_normal" width="77px" value="U">
Marsh Posté le 24-11-2003 à 14:49:22
j'avais oublié le <xsl:value-of select="REQUEST/QUERY[@CodeSender]"/>
Code :
|
Marsh Posté le 24-11-2003 à 15:16:09
PETOZAK a écrit : oui mais ca donne ca: |
fallait le dire que c'était @CodeSender que tu voulais récupérer !!!!!
quand tu le met entre crochets [@CodeSender], tu fais un Xpath de condition en fait,
en tapant REQUEST/QUERY[@CodeSender], ca veut dire que tu récupère non pas l'attribute, mais le noeud QUERY, dont l'attribute @CodeSender n'est pas vide...
tu dois faire ca plutot :
REQUEST/QUERY/@CodeSender
sois plus clair dans tes questions
Marsh Posté le 24-11-2003 à 15:23:40
<input name="frm" class="tf_normal" style="WIDTH: 77px; ">
<xsl:attribute name="value"><xsl:value-of select="REQUEST/QUERY/@CodeSender"/></xsl:attribute></input>
ca ne marche pas choco?
ca renvoit rien
Marsh Posté le 24-11-2003 à 15:27:43
chocoboy a écrit : |
mais que je suis con, j'avais meme pas tilté la dessus
Marsh Posté le 24-11-2003 à 16:27:45
PETOZAK a écrit : c marrant mais ca marche pas |
ce code :
<REQUEST>
<QUERY AscDesc="desc" SortType="MSG_TYPE" CodeSender="U" endDate="02AUG03" startDate="01AUG02">
</QUERY>
</REQUEST>
<REQUEST> : c'est bien ta racine ???
Marsh Posté le 24-11-2003 à 16:29:44
chocoboy a écrit : |
si c'est le cas, ton <xsl:template match="/">
te fait déjà rentrer dans <REQUEST> et donc, modifie ton code :
<input name="frm" class="tf_normal" style="WIDTH: 77px; ">
<xsl:attribute name="value"><xsl:value-of select="QUERY/@CodeSender"/></xsl:attribute></input>
Marsh Posté le 24-11-2003 à 16:31:00
mais ton code XSL est pas très propre...
si c'est comme je l'ai compris, crées un <xsl:template...> pour QUERY, comme tu l'as fait pour ROW
Marsh Posté le 24-11-2003 à 17:25:04
ca donne toujours rien malheureusement y a peut etre un prob avec ma version de XSLT pour Java:
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.Result;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
tu transforme ton XML+XSL comment toi?
Marsh Posté le 24-11-2003 à 17:41:15
PETOZAK a écrit : ca donne toujours rien malheureusement y a peut etre un prob avec ma version de XSLT pour Java: |
pour être sur que l'erreur vient de ton code,
charge Instant Saxon (voir google)
puis sous dos, tapes "saxon fichier.xml fichier.xsl>fichier.html" (par exemple), ca te permettra de voir ou ca cloche dans ton code
Marsh Posté le 24-11-2003 à 17:56:01
PETOZAK a écrit : merci |
un conseil, si tu débute et que tu souhaite tester un morceau de code... teste "petit"...
fais simplement un petit morceau de <xsl:template...> qui affiche simplement le champ voulu... pour l'isoler du reste de ton prog...
Marsh Posté le 25-11-2003 à 09:51:58
au fait tu as deja essaye de recuperer la valeur d'attribut ou tu travail systematiquementen profondeur avec CHILD?
Marsh Posté le 25-11-2003 à 11:04:31
Au fait Merci beaucoup Chocoboy (et les autres) pour ta patience et ta gentillesse ca marche finalement et comme tu as dis j'ai epure le code avec des templates structures
Marsh Posté le 25-11-2003 à 11:17:17
Personne ne saurait quel moteur XSLT utilise saxon parce que j'ai pas les memes resultats avec:
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.Result;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
Marsh Posté le 20-11-2003 à 16:24:35
Bonjour,
j'ai un XML qui ressemble a ca
<REQUEST>
<QUERY AscDesc="desc" SortType="MSG_TYPE" CodeSender="U" endDate="02AUG03" startDate="01AUG02">
<ENDDATE>02AUG03</ENDDATE>
</QUERY>
<RESULTSET>
</RESULTSET>
</REQUEST>
Je veux recuperer l'attribut pour le mettre dans un Textbox je fait en XSL:
<td width="50" height="25"> <input name="frm" class="tf_normal" style="WIDTH: 77px; "><xsl:attribute name="value"><xsl:value-of select="./REQUEST/QUERY[@carrierCodeSender]"/></xsl:attribute></input></td>
Le prob c que ca ne fait rien pourquoi?