recuperer un attribut d'un noeud sans child

recuperer un attribut d'un noeud sans child - XML/XSL - Programmation

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?

Reply

Marsh Posté le 20-11-2003 à 16:24:35   

Reply

Marsh Posté le 20-11-2003 à 16:31:31    

PETOZAK a écrit :

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?


 
c'est quoi ton 'carrier' ?

Reply

Marsh Posté le 21-11-2003 à 09:52:08    

au fait il faut corriger :select="./REQUEST/QUERY[@CodeSender]"

Reply

Marsh Posté le 21-11-2003 à 10:37:24    

et si tu fais ?

Code :
  1. <td width="50" height="25">
  2.   <xsl:element name="INPUT">
  3.      <xsl:attribute name="name">frm</xsl:attribute>
  4.      <xsl:attribute name="class">tf_normal</xsl:attribute>
  5.      <xsl:attribute name="whitth">77px</xsl:attribute>
  6.      <xsl:attribute name="value">REQUEST/QUERY[@CodeSender]</xsl:attribute>
  7.   </xsl:element>
  8. </td>


 
un truc dans le genre...

Reply

Marsh Posté le 21-11-2003 à 16:45:18    

PETOZAK a écrit :

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?


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


Message édité par chocoboy le 21-11-2003 à 16:46:17
Reply

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>


Message édité par PETOZAK le 24-11-2003 à 11:03:30
Reply

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>


Message édité par PETOZAK le 24-11-2003 à 11:05:45
Reply

Marsh Posté le 24-11-2003 à 11:25:51    

PETOZAK a écrit :

mon XML ressemble a ca :
<REQUEST>
 <QUERY AscDesc="desc" SortType="MSG_TYPE" CodeSender="U" endDate="02AUG03" startDate="01AUG02">
      <ENDDATE>02AUG03</ENDDATE>  
 </QUERY>
 </REQUEST>


 
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

Reply

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)

Reply

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"/>  

Reply

Marsh Posté le 24-11-2003 à 14:08:06   

Reply

Marsh Posté le 24-11-2003 à 14:08:46    

t'as essayé le bout de code que j'ai filé plus haut ?

Reply

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

Reply

Marsh Posté le 24-11-2003 à 14:17:17    

ce qui faut c ca:
<INPUT name="frm" class="tf_normal" width="77px" value="U">

Reply

Marsh Posté le 24-11-2003 à 14:49:22    

j'avais oublié le <xsl:value-of select="REQUEST/QUERY[@CodeSender]"/> :ange:

Code :
  1. ...
  2. <xsl:attribute name="value"><xsl:value-of select="./REQUEST/QUERY[@CodeSender]"/></xsl:attribute>
  3. ...

Reply

Marsh Posté le 24-11-2003 à 15:15:46    

ca marche pas :( ca renvoit  rien

Reply

Marsh Posté le 24-11-2003 à 15:16:09    

PETOZAK a écrit :

oui mais ca donne ca:
<INPUT name="frm" class="tf_normal" width="77px" value="REQUEST/QUERY[@CodeSender]">
ce qui est pas bon


 
 :??:  :lol:  
 
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

Reply

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

Reply

Marsh Posté le 24-11-2003 à 15:24:37    

c bien ca que tu dis?

Reply

Marsh Posté le 24-11-2003 à 15:27:43    

chocoboy a écrit :


 
tu dois faire ca plutot :
 
REQUEST/QUERY/@CodeSender


 
[:wam] mais que je suis con, j'avais meme pas tilté la dessus  :cry:  :cry:

Reply

Marsh Posté le 24-11-2003 à 15:47:36    

c marrant mais ca marche pas :)

Reply

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 ???

Reply

Marsh Posté le 24-11-2003 à 16:29:44    

chocoboy a écrit :


 
ce code :
 
<REQUEST>
 <QUERY AscDesc="desc" SortType="MSG_TYPE" CodeSender="U" endDate="02AUG03" startDate="01AUG02">  
 </QUERY>
</REQUEST>
 
<REQUEST> : c'est bien ta racine ???


 
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>

Reply

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

Reply

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?

Reply

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:
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?
 


 
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

Reply

Marsh Posté le 24-11-2003 à 17:49:20    

merci

Reply

Marsh Posté le 24-11-2003 à 17:56:01    


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

Reply

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?

Reply

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

Reply

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;

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed