xml+xsl : résultat en html + parties en arborescence xml

xml+xsl : résultat en html + parties en arborescence xml - XML/XSL - Programmation

Marsh Posté le 06-12-2007 à 12:13:43    

Bonjour,
 
je ne sais pas si le titre est très explicite, mais voici une explication plus détaillée de mon "problème" :
notre serveur d'appli pont des logs en xml. j'ai créé une feuille de style xsl permettant de mettre le log en forme.
certain content() de certains elements sont des records de type xml. pour ces éléments, j'aimerais afficher le contenu sous forme d'arbre xml, un peu à la manière de la feuille de style par défaut lorsqu'on ouvre un document xml dans un navigateur.
 
Est ce que vous auriez une idée sur la manière de procéder?
 
Merci d'avance.

Reply

Marsh Posté le 06-12-2007 à 12:13:43   

Reply

Marsh Posté le 06-12-2007 à 12:22:44    

http://www.dpawson.co.uk/xsl/sect2/microsoft.html
 
Section 8 : tu trouveras le code source de la feuille XSTL par défaut utilisée par IE pour faire le rendu d'un fichier XML.

Reply

Marsh Posté le 06-12-2007 à 12:25:42    

yep, merci je vais mater ça
:jap:

Reply

Marsh Posté le 06-12-2007 à 12:26:49    

A priori, faut la modifier un peu pour en faire un template, puis l'appliquer sur les bouts de XML dont il faut faire le rendu avec.

Reply

Marsh Posté le 06-12-2007 à 14:53:48    

Après quelques tests et pas mal de corrections, voici ce que ça donne :
 
Fichier data.xml de test :

Code :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <?xml-stylesheet type="text/xsl" href="sheet.xsl"?>
  3. <page>
  4.  <title>Plop</title>
  5.  <paragraph>
  6.    Coin coin
  7.  </paragraph>
  8.  <paragraph>
  9.    Cuicui
  10.  </paragraph>
  11.  <island>
  12.    <line id="1">
  13.      <plop>grmpf</plop>
  14.      <truc>proutch</truc>
  15.    </line>
  16.    <line id="2">
  17.      <plop>vroum</plop>
  18.      <truc>pouic</truc>
  19.    </line>
  20.  </island>
  21.  <island>
  22.    <data>gniarf</data>
  23.    <label>boum</label>
  24.  </island>
  25. </page>


 
Fichier sheet.xsl principal :

Code :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dc="http://www.w3.org/1999/xhtml" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:d2="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
  3.  <xsl:import href="xmlisland.xsl"/>
  4.  <!--<xsl:output method="xml" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" indent="yes" encoding="utf-8" />-->
  5.  <xsl:template match="/">
  6.    <html xmlns="http://www.w3.org/1999/xhtml">
  7.      <head>
  8.        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  9.        <title>
  10.          <xsl:value-of select="/page/title"/>
  11.        </title>
  12.        <xsl:call-template name="header"/>
  13.      </head>
  14.      <body>
  15.        <h1>
  16.          <xsl:value-of select="/page/title"/>
  17.        </h1>
  18.        <xsl:apply-templates select="/page/paragraph"/>
  19.        <xsl:for-each select="/page/island">
  20.          <div style="border: solid 1px red; margin: 10px;">
  21.            <xsl:apply-templates select="."/>
  22.          </div>
  23.        </xsl:for-each>
  24.      </body>
  25.    </html>
  26.  </xsl:template>
  27.  <xsl:template match="/page/paragraph">
  28.    <p>
  29.      <xsl:value-of select="."/>
  30.    </p>
  31.  </xsl:template>
  32. </xsl:stylesheet>


 
Fichier xmlisland.xsl (rendu XML) :

Code :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:d2="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
  3.  <xsl:template name="header">
  4.    <STYLE>
  5.      BODY {font:x-small 'Verdana'; margin-right:1.5em}
  6.      <!-- container for expanding/collapsing content -->
  7.      .c  {cursor:hand}
  8.      <!-- button - contains +/-/nbsp -->
  9.      .b  {color:red; font-family:'Courier New'; font-weight:bold;
  10.      text-decoration:none}
  11.      <!-- element container -->
  12.      .e  {margin-left:1em; text-indent:-1em; margin-right:1em}
  13.      <!-- comment or cdata -->
  14.      .k  {margin-left:1em; text-indent:-1em; margin-right:1em}
  15.      <!-- tag -->
  16.      .t  {color:#990000}
  17.      <!-- tag in xsl namespace -->
  18.      .xt {color:#990099}
  19.      <!-- attribute in xml or xmlns namespace -->
  20.      .ns {color:red}
  21.      <!-- attribute in dt namespace -->
  22.      .dt {color:green}
  23.      <!-- markup characters -->
  24.      .m  {color:blue}
  25.      <!-- text node -->
  26.      .tx {font-weight:bold}
  27.      <!-- multi-line (block) cdata -->
  28.      .db {text-indent:0px; margin-left:1em; margin-top:0px;
  29.      margin-bottom:0px;
  30.      padding-left:.3em; border-left:1px solid #CCCCCC; font:small
  31.      Courier}
  32.      <!-- single-line (inline) cdata -->
  33.      .di {font:small Courier}
  34.      <!-- DOCTYPE declaration -->
  35.      .d  {color:blue}
  36.      <!-- pi -->
  37.      .pi {color:blue}
  38.      <!-- multi-line (block) comment -->
  39.      .cb {text-indent:0px; margin-left:1em; margin-top:0px;
  40.      margin-bottom:0px;
  41.      padding-left:.3em; font:small Courier; color:#888888}
  42.      <!-- single-line (inline) comment -->
  43.      .ci {font:small Courier; color:#888888}
  44.      PRE {margin:0px; display:inline}
  45.    </STYLE>
  46.    <SCRIPT>
  47.      <xsl:comment>
  48.        <![CDATA[
  49.        // Detect and switch the display of CDATA and comments from an inline view
  50.        //  to a block view if the comment or CDATA is multi-line.
  51.        function f(e)
  52.        {
  53.          // if this element is an inline comment, and contains more than a single
  54.          //  line, turn it into a block comment.
  55.          if (e.className == "ci" ) {
  56.            if (e.children(0).innerText.indexOf("\n" ) > 0)
  57.              fix(e, "cb" );
  58.          }
  59.          
  60.          // if this element is an inline cdata, and contains more than a single
  61.          //  line, turn it into a block cdata.
  62.          if (e.className == "di" ) {
  63.            if (e.children(0).innerText.indexOf("\n" ) > 0)
  64.              fix(e, "db" );
  65.          }
  66.          
  67.          // remove the id since we only used it for cleanup
  68.          e.id = "";
  69.        }
  70.        
  71.        // Fix up the element as a "block" display and enable expand/collapse on it
  72.        function fix(e, cl)
  73.        {
  74.          // change the class name and display value
  75.          e.className = cl;
  76.          e.style.display = "block";
  77.          
  78.          // mark the comment or cdata display as a expandable container
  79.          j = e.parentElement.children(0);
  80.          j.className = "c";
  81.  
  82.          // find the +/- symbol and make it visible - the dummy link enables tabbing
  83.          k = j.children(0);
  84.          k.style.visibility = "visible";
  85.          k.href = "#";
  86.        }
  87.  
  88.        // Change the +/- symbol and hide the children.  This function works on "element"
  89.        //  displays
  90.        function ch(e)
  91.        {
  92.          // find the +/- symbol
  93.          mark = e.children(0).children(0);
  94.          
  95.          // if it is already collapsed, expand it by showing the children
  96.          if (mark.innerText == "+" )
  97.          {
  98.            mark.innerText = "-";
  99.            for (var i = 1; i < e.children.length; i++)
  100.              e.children(i).style.display = "block";
  101.          }
  102.          
  103.          // if it is expanded, collapse it by hiding the children
  104.          else if (mark.innerText == "-" )
  105.          {
  106.            mark.innerText = "+";
  107.            for (var i = 1; i < e.children.length; i++)
  108.              e.children(i).style.display="none";
  109.          }
  110.        }
  111.        
  112.        // Change the +/- symbol and hide the children.  This function work on "comment"
  113.        //  and "cdata" displays
  114.        function ch2(e)
  115.        {
  116.          // find the +/- symbol, and the "PRE" element that contains the content
  117.          mark = e.children(0).children(0);
  118.          contents = e.children(1);
  119.          
  120.          // if it is already collapsed, expand it by showing the children
  121.          if (mark.innerText == "+" )
  122.          {
  123.            mark.innerText = "-";
  124.            // restore the correct "block"/"inline" display type to the PRE
  125.            if (contents.className == "db" || contents.className == "cb" )
  126.              contents.style.display = "block";
  127.            else contents.style.display = "inline";
  128.          }
  129.          
  130.          // if it is expanded, collapse it by hiding the children
  131.          else if (mark.innerText == "-" )
  132.          {
  133.            mark.innerText = "+";
  134.            contents.style.display = "none";
  135.          }
  136.        }
  137.        
  138.        // Handle a mouse click
  139.        function cl()
  140.        {
  141.          e = window.event.srcElement;
  142.          
  143.          // make sure we are handling clicks upon expandable container elements
  144.          if (e.className != "c" )
  145.          {
  146.            e = e.parentElement;
  147.            if (e.className != "c" )
  148.            {
  149.              return;
  150.            }
  151.          }
  152.          e = e.parentElement;
  153.          
  154.          // call the correct funtion to change the collapse/expand state and display
  155.          if (e.className == "e" )
  156.            ch(e);
  157.          if (e.className == "k" )
  158.            ch2(e);
  159.        }
  160.  
  161.        // Dummy function for expand/collapse link navigation - trap onclick events instead
  162.        function ex()
  163.        {}
  164.  
  165.        // Erase bogus link info from the status window
  166.        function h()
  167.        {
  168.          window.status=" ";
  169.        }
  170.  
  171.        // Set the onclick handler
  172.        document.onclick = cl;
  173.        
  174.      ]]>
  175.      </xsl:comment>
  176.    </SCRIPT>
  177.  </xsl:template>
  178.  <xsl:template match="node()[nodeType=10]">
  179.    <DIV class="e">
  180.      <SPAN>
  181.        <SPAN class="b">&#160;</SPAN>
  182.        <SPAN class="d">
  183.          &lt;!DOCTYPE <xsl:value-of select="name()"/><I>
  184.            (View
  185.            Source for full doctype...)
  186.          </I>&gt;
  187.        </SPAN>
  188.      </SPAN>
  189.    </DIV>
  190.  </xsl:template>
  191.  <!-- Template for pis not handled elsewhere -->
  192.  <xsl:template match="processing-instruction()">
  193.    <DIV class="e">
  194.      <SPAN class="b">&#160;</SPAN>
  195.      <SPAN class="m">&lt;?</SPAN>
  196.      <SPAN class="pi">
  197.        <xsl:value-of
  198. select="name()"/>&#160;<xsl:value-of select="."/>
  199.      </SPAN>
  200.      <SPAN
  201. class="m">?&gt;</SPAN>
  202.    </DIV>
  203.  </xsl:template>
  204.  
  205.  <!-- Template for the XML declaration.  Need a separate template because the
  206. pseudo-attributes
  207.  are actually exposed as attributes instead of just element content, as
  208. in other pis -->
  209.  <!--  No support for the xml declaration
  210. <xsl:template match="pi('xml')">
  211. <DIV class="e">
  212. <SPAN class="b">&#160;</SPAN>
  213. <SPAN class="m">&lt;?</SPAN><SPAN class="pi">xml
  214.  <xsl:for-each
  215. select="@*"><xsl:value-of select="name()"/>="<xsl:value-of select="."/>"
  216. </xsl:for-each></SPAN><SPAN class="m">?&gt;</SPAN>
  217. </DIV>
  218. </xsl:template>
  219. -->
  220.  
  221.  <!-- Template for attributes not handled elsewhere -->
  222.  <xsl:template match="@*" xml:space="preserve"><SPAN><xsl:attribute
  223. name="class"><xsl:if
  224. test="starts-with(name(),'xsl:')">x</xsl:if>t</xsl:attribute>
  225.  <xsl:value-of
  226.        select="name()" /></SPAN><SPAN class="m">="</SPAN>
  227.  <B><xsl:value-of
  228.  select="."/></B><SPAN class="m">"</SPAN></xsl:template>
  229.  
  230.  <!-- Template for attributes in the xmlns or xml namespace -->
  231.  <!--  UNKNOWN
  232. <xsl:template match="@xmlns:*|@xmlns|@xml:*"><SPAN
  233.  class="ns"> <xsl:value-of
  234. select="name()"/></SPAN><SPAN class="m">="</SPAN>
  235.  <B class="ns"><xsl:value-of
  236. select="."/></B><SPAN class="m">"</SPAN></xsl:template>
  237. -->
  238.  
  239.  <!-- Template for attributes in the dt namespace -->
  240.  <!-- UNKNOWN
  241. <xsl:template match="@dt:*|@d2:*"><SPAN
  242.  class="dt"> <xsl:value-of
  243. select="name()"/></SPAN><SPAN class="m">="</SPAN><B
  244.  class="dt"><xsl:value-of
  245. select="."/></B><SPAN class="m">"</SPAN></xsl:template>
  246. -->
  247.  
  248.  <!-- Template for text nodes -->
  249.  <xsl:template match="text()">
  250.    <DIV class="e">
  251.      <SPAN class="b">&#160;</SPAN>
  252.      <SPAN class="tx">
  253.        <xsl:value-of select="."/>
  254.      </SPAN>
  255.    </DIV>
  256.  </xsl:template>
  257.  
  258.  
  259.  <!-- Note that in the following templates for comments
  260. and cdata, by default we apply a style appropriate for
  261. single line content (e.g. non-expandable, single line
  262. display).  But we also inject the attribute 'id="clean"' and
  263. a script call 'f(clean)'.  As the output is read by the
  264. browser, it executes the function immediately.  The function
  265. checks to see if the comment or cdata has multi-line data,
  266. in which case it changes the style to a expandable,
  267. multi-line display.  Performing this switch in the DHTML
  268. instead of from script in the XSL increases the performance
  269. of the style sheet, especially in the browser's asynchronous
  270. case -->
  271.  
  272.  <!-- Template for comment nodes -->
  273.  <xsl:template match="comment()">
  274.    <DIV class="k">
  275.      <SPAN>
  276.        <A class="b" onclick="return false" onfocus="h()"
  277. STYLE="visibility:hidden">-</A>
  278.        <SPAN class="m">
  279.          &lt;!--
  280.        </SPAN>
  281.      </SPAN>
  282.      <SPAN id="clean" class="ci">
  283.        <PRE>
  284.          <xsl:value-of select="."/>
  285.        </PRE>
  286.      </SPAN>
  287.      <SPAN class="b">&#160;</SPAN>
  288.      <SPAN
  289. class="m">--&gt;</SPAN>
  290.      <SCRIPT>f(clean);</SCRIPT>
  291.    </DIV>
  292.  </xsl:template>
  293.  
  294.  <!-- Template for cdata nodes -->
  295.  <!-- UNSUPPORTED
  296. <xsl:template match="cdata()">
  297. <DIV class="k">
  298. <SPAN><A class="b" onclick="return false" onfocus="h()"
  299. STYLE="visibility:hidden">-</A> <SPAN class="m">
  300.  &lt;![CDATA[</SPAN></SPAN>
  301. <SPAN id="clean" class="di"><PRE><xsl:value-of
  302.  select="."/></PRE></SPAN>
  303. <SPAN class="b">&#160;</SPAN> <SPAN
  304.  class="m">]]&gt;</SPAN>
  305. <SCRIPT>f(clean);</SCRIPT></DIV>
  306. </xsl:template>
  307. -->
  308.  
  309.  
  310.  <!-- Note the following templates for elements may
  311. examine children.  This harms to some extent the ability to
  312. process a document asynchronously - we can't process an
  313. element until we have read and examined at least some of its
  314. children.  Specifically, the first element child must be
  315. read before any template can be chosen.  And any element
  316. that does not have element children must be read completely
  317. before the correct template can be chosen. This seems an
  318. acceptable performance loss in the light of the formatting
  319. possibilities available when examining children. -->
  320.  
  321.  <!-- Template for elements not handled elsewhere (leaf nodes) -->
  322.  <xsl:template match="*">
  323.    <DIV class="e">
  324.      <DIV STYLE="margin-left:1em;text-indent:-2em">
  325.        <SPAN class="b">&#160;</SPAN>
  326.        <SPAN class="m">&lt;</SPAN>
  327.        <SPAN>
  328.          <xsl:attribute name="class">
  329.            <xsl:if test="starts-with(name(),'xsl:')">x</xsl:if>t
  330.          </xsl:attribute>
  331.          <xsl:value-of
  332.      select="name()"/>
  333.        </SPAN>
  334.        <xsl:apply-templates select="@*"/>
  335.        <SPAN class="m">
  336.          /&gt;
  337.        </SPAN>
  338.      </DIV>
  339.    </DIV>
  340.  </xsl:template>
  341.  
  342.  <!-- Template for elements with comment, pi and/or cdata children -->
  343.  <xsl:template match="*[comment() | processing-instruction()]">
  344.    <DIV class="e">
  345.      <DIV class="c">
  346.        <A href="#" onclick="return false" onfocus="h()" class="b">-</A>
  347.        <SPAN class="m">&lt;</SPAN>
  348.        <SPAN>
  349.          <xsl:attribute name="class">
  350.            <xsl:if test="starts-with(name(),'xsl:')">x</xsl:if>t
  351.          </xsl:attribute>
  352.          <xsl:value-of select="name()"/>
  353.        </SPAN>
  354.        <xsl:apply-templates select="@*"/>
  355.        <SPAN class="m">&gt;</SPAN>
  356.      </DIV>
  357.      <DIV>
  358.        <xsl:apply-templates/>
  359.        <DIV>
  360.          <SPAN class="b">&#160;</SPAN>
  361.          <SPAN class="m">&lt;/</SPAN>
  362.          <SPAN>
  363.            <xsl:attribute name="class">
  364.              <xsl:if test="starts-with(name(),'xsl:')">x</xsl:if>t
  365.            </xsl:attribute>
  366.            <xsl:value-of select="name()"/>
  367.          </SPAN>
  368.          <SPAN class="m">&gt;</SPAN>
  369.        </DIV>
  370.      </DIV>
  371.    </DIV>
  372.  </xsl:template>
  373.  
  374.  <!-- Template for elements with only text children -->
  375.  <xsl:template match="*[text() and not(comment() | processing-instruction())]">
  376.    <DIV class="e">
  377.      <DIV STYLE="margin-left:1em;text-indent:-2em">
  378.        <SPAN class="b">&#160;</SPAN>
  379.        <SPAN class="m">&lt;</SPAN>
  380.        <SPAN>
  381.          <xsl:attribute name="class">
  382.            <xsl:if test="starts-with(name(),'xsl:')">x</xsl:if>t
  383.          </xsl:attribute>
  384.          <xsl:value-of select="name()"/>
  385.        </SPAN>
  386.        <xsl:apply-templates select="@*"/>
  387.        <SPAN class="m">&gt;</SPAN>
  388.        <SPAN class="tx">
  389.          <xsl:value-of select="."/>
  390.        </SPAN>
  391.        <SPAN class="m">&lt;/</SPAN>
  392.        <SPAN>
  393.          <xsl:attribute name="class">
  394.            <xsl:if test="starts-with(name(),'xsl:')">x</xsl:if>t
  395.          </xsl:attribute>
  396.          <xsl:value-of select="name()"/>
  397.        </SPAN>
  398.        <SPAN class="m">&gt;</SPAN>
  399.      </DIV>
  400.    </DIV>
  401.  </xsl:template>
  402.  
  403.  <!-- Template for elements with element children -->
  404.  <xsl:template match="*

    • ">
  405.    <DIV class="e">
  406.      <DIV class="c" STYLE="margin-left:1em;text-indent:-2em">
  407.        <A href="#" onclick="return false" onfocus="h()" class="b">-</A>
  408.        <SPAN class="m">&lt;</SPAN>
  409.        <SPAN>
  410.          <xsl:attribute name="class">
  411.            <xsl:if test="starts-with(name(),'xsl:')">x</xsl:if>t
  412.          </xsl:attribute>
  413.          <xsl:value-of select="name()"/>
  414.        </SPAN>
  415.        <xsl:apply-templates select="@*"/>
  416.        <SPAN class="m">&gt;</SPAN>
  417.      </DIV>
  418.      <DIV>
  419.        <xsl:apply-templates/>
  420.        <DIV>
  421.          <SPAN class="b">&#160;</SPAN>
  422.          <SPAN class="m">&lt;/</SPAN>
  423.          <SPAN>
  424.            <xsl:attribute name="class">
  425.              <xsl:if test="starts-with(name(),'xsl:')">x</xsl:if>
  426.              t
  427.            </xsl:attribute>
  428.            <xsl:value-of select="name()"/>
  429.          </SPAN>
  430.          <SPAN class="m">&gt;</SPAN>
  431.        </DIV>
  432.      </DIV>
  433.    </DIV>
  434.  </xsl:template>
  435. </xsl:stylesheet>


Résultat :
http://img389.imageshack.us/img389/6902/xmlxslmz7.png


Message édité par MagicBuzz le 06-12-2007 à 14:55:49
Reply

Marsh Posté le 06-12-2007 à 16:33:30    

un grand merci pour ton aide. Mais je n'arrive pas au résultat voulu.

 

voici un exemple de fichier à traiter :

 
Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <?xml-stylesheet href="template.xsl" type="text/xsl"?>
  3. <exec-process name="CasC">
  4. <exec-start>
  5. <process>CasC</process>
  6. <version>1</version>
  7. <session-id>010041378eaa160100006401005c09ec6d0a</session-id>
  8. <date>2007:12:05 14:45:55:375</date>
  9. <trigger>message</trigger>
  10. <trigger-value>D:\jb35\DATA\CasC\Lecture\hpr0267.hpr#CasC_lecture#oru</trigger-value>
  11. </exec-start>
  12. <exec-receive name="Réception_1">
  13. <id>0b4e9700</id>
  14. <name>Réception_1</name>
  15. <sequence>2</sequence>
  16. <context-sequence>2</context-sequence>
  17. <container-sequence>1</container-sequence>
  18. <date>2007:12:06 09:59:23:140</date>
  19. <message-name>oru</message-name>
  20. <port>lecture</port>
  21. <operation>receive</operation>
  22. <async>true</async>
  23. <status>message-received</status>
  24. <message>
  25.  <name>oru</name>
  26.  <uri>record:CasC.HPRIM_22_MSG/ORU</uri>
  27.  <content>
  28.   <ORU>
  29.    <H>
  30.     <H>H</H>
  31.     <DefinitionDesSeparateurs>~^\&amp;</DefinitionDesSeparateurs>
  32.     <IdentificationDuMessage>C1</IdentificationDuMessage>
  33.     <IdentificationEmetteur>
  34.      <Code>WD</Code>
  35.      <Nom></Nom>
  36.     </IdentificationEmetteur>
  37.     <AdresseEmetteur></AdresseEmetteur>
  38.     <TypeDeMessage>
  39.      <Component1>ORU</Component1>
  40.     </TypeDeMessage>
  41.     <NumeroDeTelephoneEmetteur></NumeroDeTelephoneEmetteur>
  42.     <IdentificationDuRecepteur>
  43.      <Code>CLI</Code>
  44.      <Nom>Clinique</Nom>
  45.     </IdentificationDuRecepteur>
  46.     <Commentaire>R01</Commentaire>
  47.     <ModeDeTraitement>P</ModeDeTraitement>
  48.     <VersionEtType>
  49.      <Version>H2.1</Version>
  50.      <Type>R</Type>
  51.     </VersionEtType>
  52.     <DateEtHeureDeConstitutionDuMessage>20040720150239</DateEtHeureDeConstitutionDuMessage>
  53.    </H>
  54.    <PAT01>
  55.     <P>
  56.      <P>P</P>
  57.      <RangDuSegment>2</RangDuSegment>
  58.      <IdentifiantDuPatientAttribueParExecutant>0407070001</IdentifiantDuPatientAttribueParExecutant>
  59.      <AutreIdentifiantPatientAttribueParLeDemandeur>99999900</AutreIdentifiantPatientAttribueParLeDemandeur>
  60.      <NomDuPatient>
  61.       <NomDeFamille>TONGA</NomDeFamille>
  62.       <Prenom>AMEDEE</Prenom>
  63.       <Civilite>ENF</Civilite>
  64.      </NomDuPatient>
  65.      <NomDeJeuneFille/>
  66.      <DateDeNaissance>19941209</DateDeNaissance>
  67.      <Sexe>2</Sexe>
  68.      <Adresse>
  69.       <Ligne1>37, GRANDE RUE</Ligne1>
  70.       <Ville>ROSWELL SUR GOUGNON</Ville>
  71.       <CodePostal>00000</CodePostal>
  72.       <Pays>GRD</Pays>
  73.      </Adresse>
  74.      <Telephone>
  75.       <TelephoneJour/>
  76.      </Telephone>
  77.      <Medecins></Medecins>
  78.      <Diagnostic></Diagnostic>
  79.      <DateDeMouvement>20040707</DateDeMouvement>
  80.      <Localisation>
  81.       <Uf>0500</Uf>
  82.      </Localisation>
  83.      <ClassificationDuDiagnostic></ClassificationDuDiagnostic>
  84.     </P>
  85.     <OBR01>
  86.      <OBR>
  87.       <OBR>OBR</OBR>
  88.       <RangDuSegment>1</RangDuSegment>
  89.       <IdEchantillonEtDeDemandePourLeDemandeur>
  90.        <Component1>0407070001</Component1>
  91.       </IdEchantillonEtDeDemandePourLeDemandeur>
  92.       <IdEchantillonEtDeDemandePourExecutant></IdEchantillonEtDeDemandePourExecutant>
  93.       <AnalysesOuActes>
  94.        <Code1>EABDO</Code1>
  95.        <Libelle1>ECHOGRAPHIE ABDOMINALE</Libelle1>
  96.        <CodificationUtilisee1>L</CodificationUtilisee1>
  97.       </AnalysesOuActes>
  98.       <DateEtHeureDePriseEnCompte>20040707</DateEtHeureDePriseEnCompte>
  99.       <Preleveur></Preleveur>
  100.       <CodeAction>N</CodeAction>
  101.       <Risque></Risque>
  102.       <NatureEchantillon></NatureEchantillon>
  103.       <Prescripteur>~X~</Prescripteur>
  104.       <TelephoneDuPrescripteur></TelephoneDuPrescripteur>
  105.       <ServiceExecutant>4</ServiceExecutant>
  106.       <DestinataireDeLaCopie></DestinataireDeLaCopie>
  107.       <DemandeLiee></DemandeLiee>
  108.       <MotifDeLaDemande></MotifDeLaDemande>
  109.       <PrincipalInterpreteurDesResultats></PrincipalInterpreteurDesResultats>
  110.       <Assistant></Assistant>
  111.       <Technicien></Technicien>
  112.       <OperateurDeSaisie></OperateurDeSaisie>
  113.      </OBR>
  114.      <OBX01>
  115.       <OBX>
  116.        <OBX>OBX</OBX>
  117.        <RangDuSegment>1</RangDuSegment>
  118.        <TypeDuResultat>
  119.         <Code1>FIC</Code1>
  120.        </TypeDuResultat>
  121.        <Test>
  122.         <Code1>EABDO</Code1>
  123.         <Libelle1>ECHOGRAPHIE ABDOMINALE</Libelle1>
  124.         <CodificationUtilisee1>L</CodificationUtilisee1>
  125.        </Test>
  126.        <Resultat>
  127.         <Code1>SirCom</Code1>
  128.         <Libelle1>274173.PDF</Libelle1>
  129.         <CodificationUtilisee1>Document PDF</CodificationUtilisee1>
  130.        </Resultat>
  131.        <Resultat>
  132.         <Code1/>
  133.         <Libelle1/>
  134.         <CodificationUtilisee1/>
  135.        </Resultat>
  136.        <Unite></Unite>
  137.        <DroitAcces>20040707</DroitAcces>
  138.        <DateObtentionDuResultat/>
  139.        <SecteurTechnique></SecteurTechnique>
  140.        <Valideur></Valideur>
  141.       </OBX>
  142.       <OBX>
  143.        <OBX/>
  144.        <RangDuSegment/>
  145.        <TypeDuResultat>
  146.         <Code1/>
  147.        </TypeDuResultat>
  148.        <Test>
  149.         <Code1/>
  150.         <Libelle1/>
  151.         <CodificationUtilisee1/>
  152.        </Test>
  153.        <Resultat>
  154.         <Code1/>
  155.         <Libelle1/>
  156.         <CodificationUtilisee1/>
  157.        </Resultat>
  158.        <Unite></Unite>
  159.        <DateObtentionDuResultat/>
  160.        <SecteurTechnique></SecteurTechnique>
  161.        <Valideur></Valideur>
  162.       </OBX>
  163.       <OBX>
  164.        <OBX/>
  165.        <RangDuSegment/>
  166.        <TypeDuResultat>
  167.         <Code1/>
  168.        </TypeDuResultat>
  169.        <Test>
  170.         <Code1/>
  171.         <Libelle1/>
  172.         <CodificationUtilisee1/>
  173.        </Test>
  174.        <Resultat>
  175.         <Code1/>
  176.         <Libelle1/>
  177.         <CodificationUtilisee1/>
  178.        </Resultat>
  179.        <Unite></Unite>
  180.        <DateObtentionDuResultat/>
  181.        <SecteurTechnique></SecteurTechnique>
  182.        <Valideur></Valideur>
  183.       </OBX>
  184.       <C>
  185.        <OrigineDuCommentaire></OrigineDuCommentaire>
  186.       </C>
  187.      </OBX01>
  188.     </OBR01>
  189.    </PAT01>
  190.    <L>
  191.     <L>L</L>
  192.     <RangDuSegment>1</RangDuSegment>
  193.     <NombreDeSegmentP>7</NombreDeSegmentP>
  194.     <NombreDeSegmentDuMessage>25</NombreDeSegmentDuMessage>
  195.    </L>
  196.   </ORU>
  197.  </content>
  198.  <ORU-properties>
  199.   <destination>CasC_lecture:queue:false</destination>
  200.   <messageTime>1196862357531</messageTime>
  201.   <parentName>D:\jb35\DATA\CasC\Lecture\</parentName>
  202.   <receivedTime>1196931562046</receivedTime>
  203.   <deliveryCount>5</deliveryCount>
  204.   <size>2620</size>
  205.   <fileName>hpr0267.hpr</fileName>
  206.  </ORU-properties>
  207. </message>
  208. <duration>16</duration>
  209. </exec-receive>
  210. <exec-end>
  211. <date>2007:12:06 09:59:25:281</date>
  212. <duration>2344</duration>
  213. <status>terminated</status>
  214.  <content>
  215.  <Environment>
  216.   <executionId>3000e4a3eaea61100000</executionId>
  217.   <host>jbdemo</host>
  218.   <jeebopServer>jb35</jeebopServer>
  219.   <processName>CasC</processName>
  220.   <processVersion>1</processVersion>
  221.   <processId>0100b93daeae160100006401005c8c6ac302</processId>
  222.   <startTime>2007:12:06 09:59:23:078</startTime>
  223.   <locale>fr_FR</locale>
  224.   <counter>5</counter>
  225.   <lastInvoke>
  226.    <activityName>Appel_1</activityName>
  227.    <startTime>1196931565109</startTime>
  228.    <endTime>1196931565250</endTime>
  229.    <duration>141</duration>
  230.   </lastInvoke>
  231.   <last-fault>
  232.    <scope>Domaine_8</scope>
  233.    <type>FaultException</type>
  234.    <sequence>19</sequence>
  235.    <name>invoke-Appel_2</name>
  236.    <message>java.lang.Exception: File 274233.PDF does not exist</message>
  237.    <cause-type>java.lang.Exception</cause-type>
  238.    <cause-message>File 274233.PDF does not exist</cause-message>
  239.   </last-fault>
  240.  </Environment>
  241. </content>
  242. </exec-end>
  243. </exec-process>
 

voici ma feuille de style :

Code :
  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  3. <xsl:output method="html" encoding="ISO-8859-1" indent="no"/>
  4.  
  5.     <xsl:template match="/">
  6.         <html>
  7.             <head>
  8.                 <style>
  9.                     h1 { font-family:tahoma; font-size:11px; }
  10.                     .exec-seq-fields { font-family:tahoma; font-size:10px; border: 0px solid black; width: 100%;}
  11.                     pre.error { font-size:10px; color:red;}
  12.                     pre.raw { font-size:10px; color:grey;}
  13.                     p.line {height: 10px;}
  14.                 </style>
  15.                 <script language="JavaScript" type="text/javascript">
  16.                 function toggle(position) {
  17.                     var box=document.getElementById(position);
  18.                     var sign=document.getElementById("sign-"+position);
  19.                     if (box.style.display=='none'){
  20.                         box.style.display='block';
  21.                         sign.innerHTML='- ';
  22.                     }
  23.                     else{
  24.                         box.style.display='none';
  25.                         sign.innerHTML='+ ';
  26.                     }
  27.                 }
  28.                 
  29.  
  30.                 </script>
  31.             </head>
  32.             <body>
  33.             <xsl:apply-templates/>
  34.             </body>
  35.         </html>
  36.     </xsl:template >
  37.  
  38.     <xsl:template match="/exec-process">
  39.     <xsl:for-each select="/exec-process/*">
  40.     <!-- activity level-->
  41.     
  42.     <a href="#{position()}" class="exec-seq" id="exec-seq-{position()}" onclick="toggle('exec-seq-fields-{position()}');">
  43.     
  44.     <xsl:if test="current()/status='faulted' or current()/status='error'">
  45.         <xsl:attribute name="style">
  46.             color:red;
  47.         </xsl:attribute>
  48.     </xsl:if>
  49.     <h1>
  50.     <!--
  51.         <xsl:choose>
  52.             <xsl:when test="current()/status='ok'">
  53.                 OK::
  54.             </xsl:when>
  55.             <xsl:when test="current()/status='faulted'">
  56.                 ERROR::
  57.             </xsl:when>
  58.         </xsl:choose>
  59.     -->
  60.         <xsl:choose>
  61.             <xsl:when test="name()='exec-start'">
  62.                 START PROCESS : <xsl:value-of select="current()/process"/>
  63.             </xsl:when>
  64.             <xsl:when test="name()='exec-end'">
  65.                 END PROCESS
  66.             </xsl:when>
  67.             <xsl:otherwise>
  68.                 <span id="sign-exec-seq-fields-{position()}">+ </span><xsl:value-of select="current()/@name"/> (<xsl:value-of select="current()/status"/> )
  69.             </xsl:otherwise>
  70.         </xsl:choose>
  71.     </h1>
  72.     </a>
  73.     <div class="exec-seq-fields" id="exec-seq-fields-{position()}" style="display: none;">
  74.     <blockquote>
  75.         <xsl:for-each select="current()/*">
  76.         <!-- activity fields level-->
  77.             <xsl:choose>
  78.                 <xsl:when test="name()='error'">
  79.                     <pre class="error"><xsl:value-of select="name()"/> : <xsl:value-of select="current()"/></pre>
  80.                 </xsl:when>
  81.                 <xsl:when test="name()='message'">
  82.                     <a href="#" onclick="toggle('msg-{position()}')"><span id="sign-msg-{position()}">+ </span>show message record:</a><br/>
  83.                     <div id="msg-{position()}" style="display:none;">
  84.                         <pre class="raw"><xsl:value-of select="current()"/></pre>
  85.                     </div>
  86.                 </xsl:when>
  87.                 <xsl:when test="name()='raw-message'">
  88.                     <a href="#" onclick="toggle('raw-{position()}')"><span id="sign-raw-{position()}">+ </span>show raw message :</a><br/><div id="raw-{position()}" style="display:none;"><pre class="raw"><xsl:value-of select="current()"/></pre></div>
  89.                 </xsl:when>
  90.                 <xsl:when test="name()='duration'">
  91.                     <xsl:value-of select="name()"/> : <xsl:value-of select="current()"/> ms
  92.                 </xsl:when>
  93.                 <xsl:when test="name()='status'">
  94.                     <div style="display:none;" id="status"><xsl:value-of select="name()"/> : <xsl:value-of select="current()"/></div>
  95.                 </xsl:when>
  96.                 <xsl:when test="name()='process'">
  97.                     <div style="display:none;" id="status"><xsl:value-of select="name()"/> : <xsl:value-of select="current()"/></div>
  98.                 </xsl:when>
  99.                 <xsl:when test="name()='context-sequence' or name()='container-sequence' or name()='max-sequence'">
  100.                     <div style="display:none;" id="other-seq"><xsl:value-of select="name()"/> : <xsl:value-of select="current()"/></div>
  101.                 </xsl:when>
  102.                 <xsl:when test="name()='date'">
  103.                     <div style="display:none;" id="date"><xsl:value-of select="name()"/> : <xsl:value-of select="current()"/></div>
  104.                 </xsl:when>
  105.                 <xsl:when test="name()='name'">
  106.                     <div style="display:none;" id="name"><xsl:value-of select="name()"/> : <xsl:value-of select="current()"/></div>
  107.                 </xsl:when>
  108.                 <xsl:when test="name()='id'">
  109.                     <div style="display:none;" id="id"><xsl:value-of select="name()"/> : <xsl:value-of select="current()"/></div>
  110.                 </xsl:when>
  111.                 <xsl:otherwise>
  112.                     <xsl:value-of select="name()"/> : <xsl:value-of select="current()"/><br/>
  113.                 </xsl:otherwise>
  114.             </xsl:choose>
  115.         </xsl:for-each>
  116.     </blockquote>
  117.     </div>
  118.     </xsl:for-each>
  119.     
  120.     </xsl:template>
  121.  
  122. </xsl:stylesheet>
 

et voici le résultat :

 

http://zioul.free.fr/HFR/rendu.jpg

 

tout le probleme se situe à partir de la ligne 82 (du xsl)...j'aimerai afficher le contenu du message en xml...mais il me manque les balises..
si tu regardes l'élément <exec-receive> du fichier source, tu comprendras...c'est le <message> que je souhaite afficher.

 

si tu as une idée...je suis preneur

 

merci!


Message édité par lezioul le 06-12-2007 à 16:39:41
Reply

Marsh Posté le 07-12-2007 à 09:20:25    

j'ai testé plein de trucs, et je galère vraiment pour n'appliquer la feuille de style MS par défaut uniquement à partir du nœud qui m'intéresse.
En plus, là, je viens de tester ton exemple, tel quel, ça ne fonctionne que sous ie..

Reply

Sujets relatifs:

Leave a Replay

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